all:
  hosts:
    ubuntu-noble:
      ansible_connection: ssh
      ansible_host: 81.163.193.246
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: e1d72afb-e41a-49d6-86eb-b10478b2f0be
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 81.163.193.246
        label: ubuntu-noble
        private_ipv4: 10.128.7.160
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.246
        public_ipv6: ''
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base branches: None source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job hadolint branches: None source: osism/zuul-jobs/.zuul.yaml@main#37>'
      - '<Job hadolint branches: None source: osism/container-images/.zuul.yaml@main#2>'
      ansible_version: '8'
      attempts: 1
      branch: main
      build: 75a75c9c64a541b0a6d8c3ad27838eea
      buildset: 730c41b406f14674b7f2c2784dbb10d6
      change: '709'
      change_message: "chore(deps): update netbox\n\nThis PR contains the following\
        \ updates:\n\n| Package | Type | Update | Change | Age | Adoption | Passing\
        \ | Confidence |\n|---|---|---|---|---|---|---|---|\n| [ghcr.io/astral-sh/uv](https://redirect.github.com/astral-sh/uv)\
        \ | final | minor | `0.6.11` -> `0.7.2` | [![age](https://developer.mend.io/api/mc/badges/age/docker/ghcr.io%2fastral-sh%2fuv/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/ghcr.io%2fastral-sh%2fuv/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/ghcr.io%2fastral-sh%2fuv/0.6.11/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/ghcr.io%2fastral-sh%2fuv/0.6.11/0.7.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [netbox-plugin-dns](https://redirect.github.com/peteeckel/netbox-plugin-dns)\
        \ |  | minor | `==1.2.6` -> `==1.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/netbox-plugin-dns/1.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/netbox-plugin-dns/1.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/netbox-plugin-dns/1.2.6/1.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/netbox-plugin-dns/1.2.6/1.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [netbox-secrets](https://redirect.github.com/Onemind-Services-LLC/netbox-secrets)\
        \ |  | patch | `==2.2.0` -> `==2.2.1` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/netbox-secrets/2.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/netbox-secrets/2.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/netbox-secrets/2.2.0/2.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/netbox-secrets/2.2.0/2.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [quay.io/netboxcommunity/netbox](https://redirect.github.com/netbox-community/netbox-docker)\
        \ |  | patch | `v4.2.2` -> `v4.2.9` | [![age](https://developer.mend.io/api/mc/badges/age/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n| [quay.io/netboxcommunity/netbox](https://redirect.github.com/netbox-community/netbox-docker)\
        \ | stage | patch | `v4.2.2` -> `v4.2.9` | [![age](https://developer.mend.io/api/mc/badges/age/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/quay.io%2fnetboxcommunity%2fnetbox/v4.2.2/v4.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)\
        \ |\n\n---\n\n### Release Notes\n\n<details>\n<summary>astral-sh/uv (ghcr.io/astral-sh/uv)</summary>\n\
        \n### [`v0.7.2`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#072)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.7.1...0.7.2)\n\
        \n##### Enhancements\n\n-   Improve trace log for retryable errors ([#&#8203;13228](https://redirect.github.com/astral-sh/uv/pull/13228))\n\
        -   Use \"error\" instead of \"warning\" for self-update message ([#&#8203;13229](https://redirect.github.com/astral-sh/uv/pull/13229))\n\
        -   Error when `uv version` is used with project-specific flags but no project\
        \ is found ([#&#8203;13203](https://redirect.github.com/astral-sh/uv/pull/13203))\n\
        \n##### Bug fixes\n\n-   Fix incorrect virtual environment invalidation for\
        \ pre-release Python versions ([#&#8203;13234](https://redirect.github.com/astral-sh/uv/pull/13234))\n\
        -   Fix patching of `clang` in managed Python sysconfig ([#&#8203;13237](https://redirect.github.com/astral-sh/uv/pull/13237))\n\
        -   Respect `--project` in `uv version` ([#&#8203;13230](https://redirect.github.com/astral-sh/uv/pull/13230))\n\
        \n### [`v0.7.1`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#071)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.7.0...0.7.1)\n\
        \n##### Enhancement\n\n-   Add support for BLAKE2b-256 ([#&#8203;13204](https://redirect.github.com/astral-sh/uv/pull/13204))\n\
        \n### [`v0.7.0`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#070)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.17...0.7.0)\n\
        \nThis release contains various changes that improve correctness and user\
        \ experience, but could break some workflows; many changes have been marked\
        \ as breaking out of an abundance of caution. We expect most users to be able\
        \ to upgrade without making changes.\n\n##### Breaking changes\n\n-   **Update\
        \ `uv version` to display and update project versions ([#&#8203;12349](https://redirect.github.com/astral-sh/uv/pull/12349))**\n\
        \n    Previously, `uv version` displayed uv's version. Now, `uv version` will\
        \ display or update the project's version. This interface was [heavily requested](https://redirect.github.com/astral-sh/uv/issues/6298)\
        \ and, after much consideration, we decided that transitioning the top-level\
        \ command was the best option.\n\n    Here's a brief example:\n\n    ```console\n\
        \    $ uv init example\n    Initialized project `example` at `./example`\n\
        \    $ cd example\n    $ uv version\n    example 0.1.0\n    $ uv version --bump\
        \ major\n    example 0.1.0 => 1.0.0\n    $ uv version --short\n    1.0.0\n\
        \    ```\n\n    If used outside of a project, uv will fallback to showing\
        \ its own version still:\n\n    ```console\n    $ uv version\n    warning:\
        \ failed to read project: No `pyproject.toml` found in current directory or\
        \ any parent directory\n      running `uv self version` for compatibility\
        \ with old `uv version` command.\n      this fallback will be removed soon,\
        \ pass `--preview` to make this an error.\n\n    uv 0.7.0 (4433f41c9 2025-04-29)\n\
        \    ```\n\n    As described in the warning, `--preview` can be used to error\
        \ instead:\n\n    ```console\n    $ uv version --preview\n    error: No `pyproject.toml`\
        \ found in current directory or any parent directory\n    ```\n\n    The previous\
        \ functionality of `uv version` was moved to `uv self version`.\n\n-   **Avoid\
        \ fallback to subsequent indexes on authentication failure ([#&#8203;12805](https://redirect.github.com/astral-sh/uv/pull/12805))**\n\
        \n    When using the `first-index` strategy (the default), uv will stop searching\
        \ indexes for a package once it is found on a single index. Previously, uv\
        \ considered a package as \"missing\" from an index during authentication\
        \ failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are\
        \ represented by an HTTP 404). This behavior was motivated by unusual responses\
        \ from some package indexes, but reduces the safety of uv's index strategy\
        \ when authentication fails. Now, uv will consider an authentication failure\
        \ as a stop-point when searching for a package across indexes. The `index.ignore-error-codes`\
        \ option can be used to recover the existing behavior, e.g.:\n\n    ```toml\n\
        \    [[tool.uv.index]]\n    name = \"pytorch\"\n    url = \"https://download.pytorch.org/whl/cpu\"\
        \n    ignore-error-codes = [401, 403]\n    ```\n\n    Since PyTorch's indexes\
        \ always return a HTTP 403 for missing packages, uv special-cases indexes\
        \ on the `pytorch.org` domain to ignore that error code by default.\n\n- \
        \  **Require the command in `uvx <name>` to be available in the Python environment\
        \ ([#&#8203;11603](https://redirect.github.com/astral-sh/uv/pull/11603))**\n\
        \n    Previously, `uvx` would attempt to execute a command even if it was\
        \ not provided by a Python package. For example, if we presume `foo` is an\
        \ empty Python package which provides no command, `uvx foo` would invoke the\
        \ `foo` command on the `PATH` (if present). Now, uv will error early if the\
        \ `foo` executable is not provided by the requested Python package. This check\
        \ is not enforced when `--from` is used, so patterns like `uvx --from foo\
        \ bash -c \"...\"` are still valid. uv also still allows `uvx foo` where the\
        \ `foo` executable is provided by a dependency of `foo` instead of `foo` itself,\
        \ as this is fairly common for packages which depend on a dedicated package\
        \ for their command-line interface.\n\n-   **Use index URL instead of package\
        \ URL for keyring credential lookups ([#&#8203;12651](https://redirect.github.com/astral-sh/uv/pull/12651))**\n\
        \n    When determining credentials for querying a package URL, uv previously\
        \ sent the full URL to the `keyring` command. However, some keyring plugins\
        \ expect to receive the *index URL* (which is usually a parent of the package\
        \ URL). Now, uv requests credentials for the index URL instead. This behavior\
        \ matches `pip`.\n\n-   **Remove `--version` from subcommands ([#&#8203;13108](https://redirect.github.com/astral-sh/uv/pull/13108))**\n\
        \n    Previously, uv allowed the `--version` flag on arbitrary subcommands,\
        \ e.g., `uv run --version`. However, the `--version` flag is useful for other\
        \ operations since uv is a package manager. Consequently, we've removed the\
        \ `--version` flag from subcommands \u2014 it is only available as `uv --version`.\n\
        \n-   **Omit Python 3.7 downloads from managed versions ([#&#8203;13022](https://redirect.github.com/astral-sh/uv/pull/13022))**\n\
        \n    Python 3.7 is EOL and not formally supported by uv; however, Python\
        \ 3.7 was previously available for download on a subset of platforms.\n\n\
        -   **Reject non-PEP 751 TOML files in install, compile, and export commands\
        \ ([#&#8203;13120](https://redirect.github.com/astral-sh/uv/pull/13120), [#&#8203;13119](https://redirect.github.com/astral-sh/uv/pull/13119))**\n\
        \n    Previously, uv treated arbitrary `.toml` files passed to commands (e.g.,\
        \ `uv pip install -r foo.toml` or `uv pip compile -o foo.toml`) as `requirements.txt`-formatted\
        \ files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized\
        \ format for custom names instead, e.g., `pylock.foo.toml`.\n\n-   **Ignore\
        \ arbitrary Python requests in version files ([#&#8203;12909](https://redirect.github.com/astral-sh/uv/pull/12909))**\n\
        \n    uv allows arbitrary strings to be used for Python version requests,\
        \ in which they are treated as an executable name to search for in the `PATH`.\
        \ However, using this form of request in `.python-version` files is non-standard\
        \ and conflicts with `pyenv-virtualenv` which writes environment names to\
        \ `.python-version` files. In this release, uv will now ignore requests that\
        \ are arbitrary strings when found in `.python-version` files.\n\n-   **Error\
        \ on unknown dependency object specifiers ([12811](https://redirect.github.com/astral-sh/uv/pull/12811))**\n\
        \n    The `[dependency-groups]` entries can include \"object specifiers\"\
        , e.g. `set-phasers-to = ...` in:\n\n    ```toml\n    [dependency-groups]\n\
        \    foo = [\"pyparsing\"]\n    bar = [{set-phasers-to = \"stun\"}]\n    ```\n\
        \n    However, the only current spec-compliant object specifier is `include-group`.\
        \ Previously, uv would ignore unknown object specifiers. Now, uv will error.\n\
        \n-   **Make `--frozen` and `--no-sources` conflicting options ([#&#8203;12671](https://redirect.github.com/astral-sh/uv/pull/12671))**\n\
        \n    Using `--no-sources` always requires a new resolution and `--frozen`\
        \ will always fail when used with it. Now, this conflict is encoded in the\
        \ CLI options for clarity.\n\n-   **Treat empty `UV_PYTHON_INSTALL_DIR` and\
        \ `UV_TOOL_DIR` as unset ([#&#8203;12907](https://redirect.github.com/astral-sh/uv/pull/12907),\
        \ [#&#8203;12905](https://redirect.github.com/astral-sh/uv/pull/12905))**\n\
        \n    Previously, these variables were treated as set to the current working\
        \ directory when set to an empty string. Now, uv will ignore these variables\
        \ when empty. This matches uv's behavior for other environment variables which\
        \ configure directories.\n\n##### Enhancements\n\n-   Disallow mixing requirements\
        \ across PyTorch indexes ([#&#8203;13179](https://redirect.github.com/astral-sh/uv/pull/13179))\n\
        -   Add optional managed Python archive download cache ([#&#8203;12175](https://redirect.github.com/astral-sh/uv/pull/12175))\n\
        -   Add `poetry-core` as a `uv init` build backend option ([#&#8203;12781](https://redirect.github.com/astral-sh/uv/pull/12781))\n\
        -   Show tag hints when failing to find a compatible wheel in `pylock.toml`\
        \ ([#&#8203;13136](https://redirect.github.com/astral-sh/uv/pull/13136))\n\
        -   Report Python versions in `pyvenv.cfg` version mismatch ([#&#8203;13027](https://redirect.github.com/astral-sh/uv/pull/13027))\n\
        \n##### Bug fixes\n\n-   Avoid erroring on omitted wheel-only packages in\
        \ `pylock.toml` ([#&#8203;13132](https://redirect.github.com/astral-sh/uv/pull/13132))\n\
        -   Fix display name for `uvx --version` ([#&#8203;13109](https://redirect.github.com/astral-sh/uv/pull/13109))\n\
        -   Restore handling of authentication when encountering redirects ([#&#8203;13050](https://redirect.github.com/astral-sh/uv/pull/13050))\n\
        -   Respect build options (`--no-binary` et al) in `pylock.toml` ([#&#8203;13134](https://redirect.github.com/astral-sh/uv/pull/13134))\n\
        -   Use `upload-time` rather than `upload_time` in `uv.lock` ([#&#8203;13176](https://redirect.github.com/astral-sh/uv/pull/13176))\n\
        \n##### Documentation\n\n-   Changed `fish` completions append `>>` to overwrite\
        \ `>` ([#&#8203;13130](https://redirect.github.com/astral-sh/uv/pull/13130))\n\
        -   Add `pylock.toml` mentions where relevant ([#&#8203;13115](https://redirect.github.com/astral-sh/uv/pull/13115))\n\
        -   Add ROCm example to the PyTorch guide ([#&#8203;13200](https://redirect.github.com/astral-sh/uv/pull13200))\n\
        -   Upgrade PyTorch guide to CUDA 12.8 and PyTorch 2.7 ([#&#8203;13199](https://redirect.github.com/astral-sh/uv/pull13199))\n\
        \n### [`v0.6.17`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0617)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.16...0.6.17)\n\
        \n##### Preview features\n\n-   Add PyTorch v2.7.0 to GPU backend ([#&#8203;13072](https://redirect.github.com/astral-sh/uv/pull/13072))\n\
        \n##### Bug fixes\n\n-   Avoid panic for invalid Python versions ([#&#8203;13077](https://redirect.github.com/astral-sh/uv/pull/13077))\n\
        -   Block scripts from overwriting `python` ([#&#8203;13051](https://redirect.github.com/astral-sh/uv/pull/13051))\n\
        -   Check distribution names to handle invalid redirects ([#&#8203;12917](https://redirect.github.com/astral-sh/uv/pull/12917))\n\
        -   Check for mismatched package and distribution names on resolver thread\
        \ ([#&#8203;13088](https://redirect.github.com/astral-sh/uv/pull/13088))\n\
        -   Fix panic with invalid last character in PEP 508 name ([#&#8203;13105](https://redirect.github.com/astral-sh/uv/pull/13105))\n\
        -   Reject `requires-python` even if not listed on the index page ([#&#8203;13086](https://redirect.github.com/astral-sh/uv/pull/13086))\n\
        \n### [`v0.6.16`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.16)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.15...0.6.16)\n\
        \n#### Release Notes\n\n##### Bug fixes\n\n-   Revert \"Properly handle authentication\
        \ for 302 redirect URLs\" ([#&#8203;13041](https://redirect.github.com/astral-sh/uv/pull/13041))\n\
        \n#### Install uv 0.6.16\n\n##### Install prebuilt binaries via shell script\n\
        \n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.16\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.16/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.15`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0615)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.14...0.6.15)\n\
        \nThis release includes preliminary support for the `pylock.toml` file format,\
        \ as standardized in [PEP 751](https://peps.python.org/pep-0751/). `pylock.toml`\
        \ is an alternative resolution output format intended to replace `requirements.txt`\
        \ (e.g., in the context of `uv pip compile`, whereby a \"locked\" `requirements.txt`\
        \ file is generated from a set of input requirements). `pylock.toml` is standardized\
        \ and tool-agnostic, such that in the future, `pylock.toml` files generated\
        \ by uv could be installed by other tools, and vice versa.\n\nAs of this release,\
        \ `pylock.toml` is supported in the following commands:\n\n-   To export a\
        \ `uv.lock` to the `pylock.toml` format, run: `uv export -o pylock.toml`\n\
        -   To generate a `pylock.toml` file from a set of requirements, run: `uv\
        \ pip compile -o pylock.toml requirements.in`\n-   To install from a `pylock.toml`\
        \ file, run: `uv pip sync pylock.toml` or `uv pip install -r pylock.toml`\n\
        \n##### Enhancements\n\n-   Add PEP 751 support to `uv pip compile` ([#&#8203;13019](https://redirect.github.com/astral-sh/uv/pull/13019))\n\
        -   Add `uv export` support for PEP 751 ([#&#8203;12955](https://redirect.github.com/astral-sh/uv/pull/12955))\n\
        -   Accept `requirements.txt` (verbatim) as a format on the CLI ([#&#8203;12957](https://redirect.github.com/astral-sh/uv/pull/12957))\n\
        -   Add `UV_NO_EDITABLE` environment variable to set `--no-editable` on all\
        \ invocations ([#&#8203;12773](https://redirect.github.com/astral-sh/uv/pull/12773))\n\
        -   Add `pylock.toml` to `uv pip install` and `uv pip sync` ([#&#8203;12992](https://redirect.github.com/astral-sh/uv/pull/12992))\n\
        -   Add a brief sleep before sending `SIGINT` to child processes ([#&#8203;13018](https://redirect.github.com/astral-sh/uv/pull/13018))\n\
        -   Add upload time to `uv.lock` ([#&#8203;12968](https://redirect.github.com/astral-sh/uv/pull/12968))\n\
        -   Allow updating Git sources by name ([#&#8203;12897](https://redirect.github.com/astral-sh/uv/pull/12897))\n\
        -   Cache `which git` in `uv init` ([#&#8203;12893](https://redirect.github.com/astral-sh/uv/pull/12893))\n\
        -   Enable `--dry-run` with `--locked` / `--frozen` for `uv sync` ([#&#8203;12778](https://redirect.github.com/astral-sh/uv/pull/12778))\n\
        -   Infer output type in `uv export` ([#&#8203;12958](https://redirect.github.com/astral-sh/uv/pull/12958))\n\
        -   Make `uv init` resilient against broken git ([#&#8203;12895](https://redirect.github.com/astral-sh/uv/pull/12895))\n\
        -   Respect build constraints for `uv run --with` dependencies ([#&#8203;12882](https://redirect.github.com/astral-sh/uv/pull/12882))\n\
        -   Split UV_INDEX on all whitespace ([#&#8203;12820](https://redirect.github.com/astral-sh/uv/pull/12820))\n\
        -   Support build constraints in `uv tool` and PEP723 scripts. ([#&#8203;12842](https://redirect.github.com/astral-sh/uv/pull/12842))\n\
        -   Use suffix from `uvx` binary when searching for uv binary ([#&#8203;12923](https://redirect.github.com/astral-sh/uv/pull/12923))\n\
        -   Update version formatting to use cyan color ([#&#8203;12943](https://redirect.github.com/astral-sh/uv/pull/12943))\n\
        -   Add debug logs for version file search ([#&#8203;12951](https://redirect.github.com/astral-sh/uv/pull/12951))\n\
        -   Fix `SourceNotAllowed` error message during Python discovery ([#&#8203;13012](https://redirect.github.com/astral-sh/uv/pull/13012))\n\
        -   Obfuscate password in credentials debug messages ([#&#8203;12944](https://redirect.github.com/astral-sh/uv/pull/12944))\n\
        -   Obfuscate possible tokens in URL logs ([#&#8203;12969](https://redirect.github.com/astral-sh/uv/pull/12969))\n\
        -   Validate that PEP 751 entries don't include multiple sources ([#&#8203;12993](https://redirect.github.com/astral-sh/uv/pull/12993))\n\
        \n##### Preview features\n\n-   Build backend: Add reference docs and schema\
        \ ([#&#8203;12803](https://redirect.github.com/astral-sh/uv/pull/12803))\n\
        \n##### Bug fixes\n\n-   Align supported `config-settings` with example in\
        \ docs ([#&#8203;12947](https://redirect.github.com/astral-sh/uv/pull/12947))\n\
        -   Ensure virtual environment is compatible with interpreter on sync ([#&#8203;12884](https://redirect.github.com/astral-sh/uv/pull/12884))\n\
        -   Fix `PythonDownloadRequest` parsing for partial keys ([#&#8203;12925](https://redirect.github.com/astral-sh/uv/pull/12925))\n\
        -   Fix pre-release exclusive comparison operator in `uv-pep440` ([#&#8203;12836](https://redirect.github.com/astral-sh/uv/pull/12836))\n\
        -   Forward additional signals to the child process in `uv run` ([#&#8203;13017](https://redirect.github.com/astral-sh/uv/pull/13017))\n\
        -   Omit PEP 751 version for source trees ([#&#8203;13030](https://redirect.github.com/astral-sh/uv/pull/13030))\n\
        -   Patch `CC` and `CCX` entries in sysconfig for cross-compiled `aarch64`\
        \ Python distributions ([#&#8203;12239](https://redirect.github.com/astral-sh/uv/pull/12239))\n\
        -   Properly handle authentication for HTTP 302 redirect URLs ([#&#8203;12920](https://redirect.github.com/astral-sh/uv/pull/12920))\n\
        -   Set 4MB stack size for all threads, introduce `UV_STACK_SIZE` ([#&#8203;12839](https://redirect.github.com/astral-sh/uv/pull/12839))\n\
        -   Show PyPy downloads during `uv python list` ([#&#8203;12915](https://redirect.github.com/astral-sh/uv/pull/12915))\n\
        -   Add `subdirectory` to Direct URL for local directories ([#&#8203;12971](https://redirect.github.com/astral-sh/uv/pull/12971))\n\
        -   Prefer stable releases over pre-releases in `uv python install` ([#&#8203;12194](https://redirect.github.com/astral-sh/uv/pull/12194))\n\
        -   Write requested Python variant to pin file in `uv init` ([#&#8203;12870](https://redirect.github.com/astral-sh/uv/pull/12870))\n\
        \n##### Documentation\n\n-   Fix CLI reference with code block ([#&#8203;12807](https://redirect.github.com/astral-sh/uv/pull/12807))\n\
        -   Fix lockfile note ([#&#8203;12793](https://redirect.github.com/astral-sh/uv/pull/12793))\n\
        -   Fix typo in a reference ([#&#8203;12858](https://redirect.github.com/astral-sh/uv/pull/12858))\n\
        -   Improve docs for `uv python list --only-downloads` and `--only-installed`\
        \ ([#&#8203;12916](https://redirect.github.com/astral-sh/uv/pull/12916))\n\
        -   Update note on lack of musl distributions to ARM-only ([#&#8203;12825](https://redirect.github.com/astral-sh/uv/pull/12825))\n\
        -   Add section on shebangs for scripts ([#&#8203;11553](https://redirect.github.com/astral-sh/uv/pull/11553))\n\
        -   Display aliases for long and short args in the CLI reference ([#&#8203;12824](https://redirect.github.com/astral-sh/uv/pull/12824))\n\
        -   Fix highlight line in explicit index documentation ([#&#8203;12887](https://redirect.github.com/astral-sh/uv/pull/12887))\n\
        -   Add explicit source (matching PyTorch guide) ([#&#8203;12844](https://redirect.github.com/astral-sh/uv/pull/12844))\n\
        -   Fix link to issue ([#&#8203;12823](https://redirect.github.com/astral-sh/uv/pull/12823))\n\
        -   Fix grammatical error in FastAPI guide ([#&#8203;12908](https://redirect.github.com/astral-sh/uv/pull/12908))\n\
        -   Add `--locked` to `uv sync` in GitHub Actions guide ([#&#8203;12819](https://redirect.github.com/astral-sh/uv/pull/12819))\n\
        -   Improve formatting for `\"all\"` `default-groups` setting documentation\
        \ ([#&#8203;12963](https://redirect.github.com/astral-sh/uv/pull/12963))\n\
        -   Replace `--frozen` with `--locked` in Docker integration guide ([#&#8203;12818](https://redirect.github.com/astral-sh/uv/pull/12818))\n\
        \n### [`v0.6.14`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.14)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.13...0.6.14)\n\
        \n#### Release Notes\n\n##### Python versions\n\nThe following Python versions\
        \ have been added:\n\n-   CPython 3.13.3\n-   CPython 3.12.10\n-   CPython\
        \ 3.11.12\n-   CPython 3.10.17\n-   CPython 3.9.22\n\nSee the [`python-build-standalone`\
        \ release notes](https://redirect.github.com/astral-sh/python-build-standalone/releases/tag/20250409)\
        \ for more details.\n\n##### Enhancements\n\n-   Add `uv-build` and `uv_build`\
        \ aliases to `uv init --build-backend` ([#&#8203;12776](https://redirect.github.com/astral-sh/uv/pull/12776))\n\
        -   Emit dedicated error message for Conda `environment.yml` files ([#&#8203;12669](https://redirect.github.com/astral-sh/uv/pull/12669))\n\
        \n##### Preview features\n\n-   Build backend: Check module dir exists for\
        \ sdist build ([#&#8203;12779](https://redirect.github.com/astral-sh/uv/pull/12779))\n\
        -   Build backend: Fix sdist with long directories ([#&#8203;12764](https://redirect.github.com/astral-sh/uv/pull/12764))\n\
        \n##### Performance\n\n-   Avoid querying GitHub on repeated install invocations\
        \ ([#&#8203;12767](https://redirect.github.com/astral-sh/uv/pull/12767))\n\
        \n##### Bug fixes\n\n-   Error when `tool.uv.sources` is set in system-level\
        \ configuration file ([#&#8203;12757](https://redirect.github.com/astral-sh/uv/pull/12757))\n\
        -   Split workspace members onto their own lines in `uv init` ([#&#8203;12756](https://redirect.github.com/astral-sh/uv/pull/12756))\n\
        \n##### Documentation\n\n-   Add lockfile note about PEP 751 ([#&#8203;12732](https://redirect.github.com/astral-sh/uv/pull/12732))\n\
        -   Extend the reference documentation for `uv pip sync` ([#&#8203;12683](https://redirect.github.com/astral-sh/uv/pull/12683))\n\
        -   Fix mismatched pip interface header / nav titles ([#&#8203;12640](https://redirect.github.com/astral-sh/uv/pull/12640))\n\
        \n### uv 0.6.14\n\n#### Install uv 0.6.14\n\n##### Install prebuilt binaries\
        \ via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.14\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.14/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.13`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.13)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.12...0.6.13)\n\
        \n#### Release Notes\n\n##### Enhancements\n\n-   Add `--show-version` to\
        \ `uv python find` ([#&#8203;12376](https://redirect.github.com/astral-sh/uv/pull/12376))\n\
        -   Remove `--no-config` warning from `uv pip compile` and `uv pip sync` ([#&#8203;12642](https://redirect.github.com/astral-sh/uv/pull/12642))\n\
        -   Skip repeated directories in `PATH` when searching for Python interpreters\
        \ ([#&#8203;12367](https://redirect.github.com/astral-sh/uv/pull/12367))\n\
        -   Unset `SCRIPT_PATH` in relocatable activation script ([#&#8203;12672](https://redirect.github.com/astral-sh/uv/pull/12672))\n\
        -   Add `UV_PYTHON_DOWNLOADS_JSON_URL` to set custom managed python sources\
        \ ([#&#8203;10939](https://redirect.github.com/astral-sh/uv/pull/10939))\n\
        -   Reject `pyproject.toml` files in `uv pip compile -o` ([#&#8203;12673](https://redirect.github.com/astral-sh/uv/pull/12673))\n\
        -   Respect the `--offline` flag for Git operations ([#&#8203;12619](https://redirect.github.com/astral-sh/uv/pull/12619))\n\
        \n##### Bug fixes\n\n-   Warn instead of error if CRC appears to be missing\
        \ ([#&#8203;12722](https://redirect.github.com/astral-sh/uv/pull/12722))\n\
        -   Avoid infinite loop in `uv export` with conflicts ([#&#8203;12726](https://redirect.github.com/astral-sh/uv/pull/12726))\n\
        \n##### Rust API\n\n-   Update MSRV to 1.84 ([#&#8203;12670](https://redirect.github.com/astral-sh/uv/pull/12670))\n\
        \n### uv 0.6.13\n\n#### Install uv 0.6.13\n\n##### Install prebuilt binaries\
        \ via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.13\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.13/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n### [`v0.6.12`](https://redirect.github.com/astral-sh/uv/releases/tag/0.6.12)\n\
        \n[Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.6.11...0.6.12)\n\
        \n#### Release Notes\n\n##### Enhancements\n\n-   Report the queried executable\
        \ path in `uv python list` ([#&#8203;12628](https://redirect.github.com/astral-sh/uv/pull/12628))\n\
        -   Improve archive unpack error messages ([#&#8203;12627](https://redirect.github.com/astral-sh/uv/pull/12627))\n\
        \n##### Bug fixes\n\n-   Respect `authenticate` when using `explicit = true`\
        \ ([#&#8203;12631](https://redirect.github.com/astral-sh/uv/pull/12631))\n\
        -   Normalize extra and group names in `uv add` and `uv remove` ([#&#8203;12586](https://redirect.github.com/astral-sh/uv/pull/12586))\n\
        -   Enforce CRC-32 checks when unpacking archives ([#&#8203;12623](https://redirect.github.com/astral-sh/uv/pull/12623))\n\
        -   Fix parsing of `python-platform` in settings files ([#&#8203;12592](https://redirect.github.com/astral-sh/uv/pull/12592))\n\
        \n##### Documentation\n\n-   Add note about `uv build` to `package = false`\
        \ ([#&#8203;12608](https://redirect.github.com/astral-sh/uv/pull/12608))\n\
        -   Add index fallback note to `authenticate = always` documentation ([#&#8203;12498](https://redirect.github.com/astral-sh/uv/pull/12498))\n\
        -   Fix invalid 'kind' reference in flat index docs ([#&#8203;12583](https://redirect.github.com/astral-sh/uv/pull/12583))\n\
        \n### uv 0.6.12\n\n#### Install uv 0.6.12\n\n##### Install prebuilt binaries\
        \ via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.12/uv-installer.sh\
        \ | sh\n```\n\n##### Install prebuilt binaries via powershell script\n\n```sh\n\
        powershell -ExecutionPolicy Bypass -c \"irm https://github.com/astral-sh/uv/releases/download/0.6.12/uv-installer.ps1\
        \ | iex\"\n```\n\n#### Download uv 0.6.12\n\n|  File  | Platform | Checksum\
        \ |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-apple-darwin.tar.gz)\
        \ | Apple Silicon macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-apple-darwin.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-apple-darwin.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-pc-windows-msvc.zip)\
        \ | ARM64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-i686-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-pc-windows-msvc.zip)\
        \ | x86 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-pc-windows-msvc.zip.sha256)\
        \ |\n| [uv-x86\\_64-pc-windows-msvc.zip](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-unknown-linux-gnu.tar.gz)\
        \ | ARM64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-unknown-linux-gnu.tar.gz)\
        \ | x86 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-powerpc64-unknown-linux-gnu.tar.gz)\
        \ | PPC64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-powerpc64le-unknown-linux-gnu.tar.gz)\
        \ | PPC64LE Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-s390x-unknown-linux-gnu.tar.gz)\
        \ | S390x Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-s390x-unknown-linux-gnu.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-gnu.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-armv7-unknown-linux-gnueabihf.tar.gz)\
        \ | ARMv7 Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)\
        \ |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-unknown-linux-musl.tar.gz)\
        \ | ARM64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-aarch64-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-i686-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-unknown-linux-musl.tar.gz)\
        \ | x86 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-i686-unknown-linux-musl.tar.gz.sha256)\
        \ |\n| [uv-x86\\_64-unknown-linux-musl.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-x86\\\
        _64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-arm-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-armv7-unknown-linux-musleabihf.tar.gz)\
        \ | ARMv7 MUSL Linux | [checksum](https://redirect.github.com/astral-sh/uv/releases/download/0.6.12/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256)\
        \ |\n\n</details>\n\n<details>\n<summary>peteeckel/netbox-plugin-dns (netbox-plugin-dns)</summary>\n\
        \n### [`v1.3.0`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.3.0):\
        \ NetBox 4.3 Compatibility Release 1.3.0\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.11...1.3.0)\n\
        \nNetBox DNS 1.3.0 adds support for NetBox 4.3. Older versions of NetBox are\
        \ not supported with this release.\n\nApart from that, there are no functional\
        \ changes relative to the last 1.2 release 1.2.11.\n\nImplemented GraphQL\
        \ enums and filters compatible with NetBox 4.3 by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/735dae4c6e8675628e93ef6712d151bcaf3ede49\n\
        Added NetBox 4.3 GraphQL support for DNSSEC models by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/735dae4c6e8675628e93ef6712d151bcaf3ede49\n\
        Reorganised and enhanced GraphQL filters by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/f1d4a1699b2404fca4cbdfd6a3ee636aa21ab2f4\n\
        Adjusted to new ObjectContactsMixin behaviour by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/def069e24ced836ee828c70b1044c4986b2d45c1\n\
        Updated compatibility information for Release 1.3 by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/0f196a6c5c8032c7b359f24ba6449d998431de07\n\
        Removed default_return_url from all model views by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/dbc904340b1020f46f5a0bdca14ae68547965240\n\
        Removed version dependency from quick_add use by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/fd10a9160700883147a24c4ef76b351f922ac54a\n\
        Fixed GraphQL filter for DNSSECKeyTemplate by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/a131f69ebd7b50001f78dddfc542d0303c6ec66e\n\
        Unified ordering of code elemente (Meta class etc.) by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/f2b24fb57d5a704de2847ccf317911c95de7cdbf\n\
        Replaced redundant explicit field definitions with labels/help_texts by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in https://github.com/peteeckel/netbox-plugin-dns/commit/30cd018464887f6db6e2db3be8d6b40cfb96082a\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.11...main\n\
        \n### [`v1.2.11`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.11):\
        \ Bugfix Release 1.2.11\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.10...1.2.11)\n\
        \n#### What's Changed\n\n-   Set the tenant serialiser to nested everywhere\
        \ it is used by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/619](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/619)\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.10...1.2.11\n\
        \n### [`v1.2.10`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.10)\n\
        \n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.9...1.2.10)\n\
        \n#### What's Changed\n\n-   Declared parental_agents a SOA clean field by\
        \ [@&#8203;peteeckel](https://redirect.github.com/peteeckel) in [https://github.com/peteeckel/netbox-plugin-dns/pull/612](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/612)\n\
        -   Fix detection of invalid double dashes by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/614](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/614)\n\
        -   Updated and fixed translations by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/615](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/615)\n\
        -   Fixed the french translation by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/616](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/616)\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.9...1.2.10\n\
        \n### [`v1.2.9`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.9):\
        \ Feature release 1.2.9\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.8...1.2.9)\n\
        \n#### What's Changed\n\n-   Redesigned the record ChoiceSets and created\
        \ the `custom_record_types` option by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/599](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/599)\n\
        -   Provide a default list of filtered RRTYPEs by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/601](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/601)\n\
        -   slight change of wording by [@&#8203;jpmens](https://redirect.github.com/jpmens)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/602](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/602)\n\
        -   Added the option to remove specific record types from the filter list\
        \ by [@&#8203;peteeckel](https://redirect.github.com/peteeckel) in [https://github.com/peteeckel/netbox-plugin-dns/pull/604](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/604)\n\
        -   Introduced check for SOA-safe fields and added tests by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/606](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/606)\n\
        -   Added the parental_agents field to DNSSECPolicy by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/607](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/607)\n\
        -   Moved the parental_agents field from DNSSECPolicy to Zone by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/609](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/609)\n\
        \n**Full Changelog**: https://github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.9\n\
        \n### [`v1.2.8`](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.8)\n\
        \n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.7...1.2.8)\n\
        \n### [`v1.2.7`](https://redirect.github.com/peteeckel/netbox-plugin-dns/releases/tag/1.2.7):\
        \ Feature/Bugfix Release 1.2.7\n\n[Compare Source](https://redirect.github.com/peteeckel/netbox-plugin-dns/compare/1.2.6...1.2.7)\n\
        \n#### DNSSEC\n\nThis is release adds DNSSEC support for NetBox DNS.\n\nNetBox\
        \ DNS supports the management of DNSSEC in as much as DNSSEC Key Templates\
        \ and DNSSEC Policies can be stored in NetBox DNS and assigned to zones. It\
        \ does not, however, support zone signing nor storing cryptographic material\
        \ in the NetBox database. There are two main reasons for this concept:\n\n\
        1.  Storing cryptographic material in a data source for automation is generally\
        \ problematic. While there is the NetBox Secrets plugin, it is better practice\
        \ to store confidential data in vault systems specifically created for this\
        \ purpose. (In some cases the keys are stored in HSMs as an added method of\
        \ protection.)\n2.  In typical modern scenarios, signing servers maintain\
        \ keys and sign records, so such configurations do not even require having\
        \ NetBox DNS provide keys or create the signatures from within NetBox DNS.\n\
        \nAdditionally, there is no direct integration between NetBox and any given\
        \ name server implementation, so an interface for providing signed zones to\
        \ a name server is generally out of scope for NetBox DNS, just as it is the\
        \ case for serving plain DNS. This should be implemented using specific solutions\
        \ adapted to the use case and the name server implementation used.\n\nAs noted\
        \ earlier there are two data models for DNSSEC in NetBox DNS: DNSSEC Key Templates\
        \ and DNSSEC Policies. The former are used for storing parameters for DNSSEC\
        \ Keys such as the type, algorithm and lifetime, and the latter to define\
        \ policies that determine how often signatures are regenerated, DS records\
        \ are propagated etc.\n\nWhile the implementation is oriented largely towards\
        \ options BIND 9 provides, this is mainly because that software has a huge\
        \ set of configuration options and other products are usually not very different,\
        \ in most cases more limited than BIND 9. Given the large installed base of\
        \ BIND 9, this is considered a good basis. (There is, however, no reason why\
        \ NetBox DNS cannot be used to maintain data for, say, Knot-DNS or PowerDNS.)\n\
        \nFor a summary of the new functionality, see [this blogpost](https://jpmens.net/2025/03/16/dnssec-policy-and-key-template-support-in-netbox-dns/)\
        \ by [@&#8203;jpmens](https://redirect.github.com/jpmens).\n\n#### What's\
        \ Changed\n\n-   SOA MNAME must be checked in zone forms if zone template\
        \ is not set by [@&#8203;peteeckel](https://redirect.github.com/peteeckel)\
        \ in [https://github.com/peteeckel/netbox-plugin-dns/pull/589](https://redirect.github.com/peteeckel/netbox-plugin-dns/pull/589)\n\
        -   complete fr translation by [@&#8203;jean1](https://redirect.github.\n\n\
        </details>\n\n---\n\n### Configuration\n\n\U0001F4C5 **Schedule**: Branch\
        \ creation - At any time (no schedule defined), Automerge - At any time (no\
        \ schedule defined).\n\n\U0001F6A6 **Automerge**: Disabled by config. Please\
        \ merge this manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever\
        \ PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F47B\
        \ **Immortal**: This PR will be recreated if closed unmerged. Get [config\
        \ help](https://redirect.github.com/renovatebot/renovate/discussions) if that's\
        \ undesired.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to rebase/retry\
        \ this PR, check this box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).\
        \ View the [repository job log](https://developer.mend.io/github/osism/container-images).\n\
        <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/container-images/pull/709
      child_jobs: []
      commit_id: 617e4d5c2a6daa685ab68eb055a057ed61cf36c7
      event_id: bd385c60-26bc-11f0-8a3e-3bcaaabe5f63
      executor:
        hostname: 7d211f194f6a
        inventory_file: /var/lib/zuul/builds/75a75c9c64a541b0a6d8c3ad27838eea/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/75a75c9c64a541b0a6d8c3ad27838eea/work/logs
        result_data_file: /var/lib/zuul/builds/75a75c9c64a541b0a6d8c3ad27838eea/work/results.json
        src_root: /var/lib/zuul/builds/75a75c9c64a541b0a6d8c3ad27838eea/work/src
        work_root: /var/lib/zuul/builds/75a75c9c64a541b0a6d8c3ad27838eea/work
      items:
      - branch: main
        change: '709'
        change_url: https://github.com/osism/container-images/pull/709
        patchset: 617e4d5c2a6daa685ab68eb055a057ed61cf36c7
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          name: osism/container-images
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      job: hadolint
      jobtags: []
      max_attempts: 3
      message: Y2hvcmUoZGVwcyk6IHVwZGF0ZSBuZXRib3gKClRoaXMgUFIgY29udGFpbnMgdGhlIGZvbGxvd2luZyB1cGRhdGVzOgoKfCBQYWNrYWdlIHwgVHlwZSB8IFVwZGF0ZSB8IENoYW5nZSB8IEFnZSB8IEFkb3B0aW9uIHwgUGFzc2luZyB8IENvbmZpZGVuY2UgfAp8LS0tfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfC0tLXwKfCBbZ2hjci5pby9hc3RyYWwtc2gvdXZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYpIHwgZmluYWwgfCBtaW5vciB8IGAwLjYuMTFgIC0+IGAwLjcuMmAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjcuMj9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW2Fkb3B0aW9uXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWRvcHRpb24vZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjcuMj9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW3Bhc3NpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb21wYXRpYmlsaXR5L2RvY2tlci9naGNyLmlvJTJmYXN0cmFsLXNoJTJmdXYvMC42LjExLzAuNy4yP3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL2doY3IuaW8lMmZhc3RyYWwtc2glMmZ1di8wLjYuMTEvMC43LjI/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfAp8IFtuZXRib3gtcGx1Z2luLWRuc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucykgfCAgfCBtaW5vciB8IGA9PTEuMi42YCAtPiBgPT0xLjMuMGAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9uZXRib3gtcGx1Z2luLWRucy8xLjMuMD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW2Fkb3B0aW9uXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWRvcHRpb24vcHlwaS9uZXRib3gtcGx1Z2luLWRucy8xLjMuMD9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW3Bhc3NpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb21wYXRpYmlsaXR5L3B5cGkvbmV0Ym94LXBsdWdpbi1kbnMvMS4yLjYvMS4zLjA/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL25ldGJveC1wbHVnaW4tZG5zLzEuMi42LzEuMy4wP3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfCBbbmV0Ym94LXNlY3JldHNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9PbmVtaW5kLVNlcnZpY2VzLUxMQy9uZXRib3gtc2VjcmV0cykgfCAgfCBwYXRjaCB8IGA9PTIuMi4wYCAtPiBgPT0yLjIuMWAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9uZXRib3gtc2VjcmV0cy8yLjIuMT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW2Fkb3B0aW9uXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvYWRvcHRpb24vcHlwaS9uZXRib3gtc2VjcmV0cy8yLjIuMT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8IFshW3Bhc3NpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9jb21wYXRpYmlsaXR5L3B5cGkvbmV0Ym94LXNlY3JldHMvMi4yLjAvMi4yLjE/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL25ldGJveC1zZWNyZXRzLzIuMi4wLzIuMi4xP3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfCBbcXVheS5pby9uZXRib3hjb21tdW5pdHkvbmV0Ym94XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vbmV0Ym94LWNvbW11bml0eS9uZXRib3gtZG9ja2VyKSB8ICB8IHBhdGNoIHwgYHY0LjIuMmAgLT4gYHY0LjIuOWAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi45P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbYWRvcHRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZG9wdGlvbi9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjk/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtwYXNzaW5nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29tcGF0aWJpbGl0eS9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjIvdjQuMi45P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi4yL3Y0LjIuOT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CnwgW3F1YXkuaW8vbmV0Ym94Y29tbXVuaXR5L25ldGJveF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL25ldGJveC1jb21tdW5pdHkvbmV0Ym94LWRvY2tlcikgfCBzdGFnZSB8IHBhdGNoIHwgYHY0LjIuMmAgLT4gYHY0LjIuOWAgfCBbIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi45P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbYWRvcHRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZG9wdGlvbi9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjk/c2xpbT10cnVlKV0oaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9tZXJnZS1jb25maWRlbmNlLykgfCBbIVtwYXNzaW5nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29tcGF0aWJpbGl0eS9kb2NrZXIvcXVheS5pbyUyZm5ldGJveGNvbW11bml0eSUyZm5ldGJveC92NC4yLjIvdjQuMi45P3NsaW09dHJ1ZSldKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgWyFbY29uZmlkZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubWVuZC5pby9hcGkvbWMvYmFkZ2VzL2NvbmZpZGVuY2UvZG9ja2VyL3F1YXkuaW8lMmZuZXRib3hjb21tdW5pdHklMmZuZXRib3gvdjQuMi4yL3Y0LjIuOT9zbGltPXRydWUpXShodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL21lcmdlLWNvbmZpZGVuY2UvKSB8CgotLS0KCiMjIyBSZWxlYXNlIE5vdGVzCgo8ZGV0YWlscz4KPHN1bW1hcnk+YXN0cmFsLXNoL3V2IChnaGNyLmlvL2FzdHJhbC1zaC91dik8L3N1bW1hcnk+CgojIyMgW2B2MC43LjJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDcyKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2NvbXBhcmUvMC43LjEuLi4wLjcuMikKCiMjIyMjIEVuaGFuY2VtZW50cwoKLSAgIEltcHJvdmUgdHJhY2UgbG9nIGZvciByZXRyeWFibGUgZXJyb3JzIChbIyYjODIwMzsxMzIyOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMjI4KSkKLSAgIFVzZSAiZXJyb3IiIGluc3RlYWQgb2YgIndhcm5pbmciIGZvciBzZWxmLXVwZGF0ZSBtZXNzYWdlIChbIyYjODIwMzsxMzIyOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMjI5KSkKLSAgIEVycm9yIHdoZW4gYHV2IHZlcnNpb25gIGlzIHVzZWQgd2l0aCBwcm9qZWN0LXNwZWNpZmljIGZsYWdzIGJ1dCBubyBwcm9qZWN0IGlzIGZvdW5kIChbIyYjODIwMzsxMzIwM10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMjAzKSkKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIEZpeCBpbmNvcnJlY3QgdmlydHVhbCBlbnZpcm9ubWVudCBpbnZhbGlkYXRpb24gZm9yIHByZS1yZWxlYXNlIFB5dGhvbiB2ZXJzaW9ucyAoWyMmIzgyMDM7MTMyMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzIzNCkpCi0gICBGaXggcGF0Y2hpbmcgb2YgYGNsYW5nYCBpbiBtYW5hZ2VkIFB5dGhvbiBzeXNjb25maWcgKFsjJiM4MjAzOzEzMjM3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMyMzcpKQotICAgUmVzcGVjdCBgLS1wcm9qZWN0YCBpbiBgdXYgdmVyc2lvbmAgKFsjJiM4MjAzOzEzMjMwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMyMzApKQoKIyMjIFtgdjAuNy4xYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzA3MSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9jb21wYXJlLzAuNy4wLi4uMC43LjEpCgojIyMjIyBFbmhhbmNlbWVudAoKLSAgIEFkZCBzdXBwb3J0IGZvciBCTEFLRTJiLTI1NiAoWyMmIzgyMDM7MTMyMDRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzIwNCkpCgojIyMgW2B2MC43LjBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDcwKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2NvbXBhcmUvMC42LjE3Li4uMC43LjApCgpUaGlzIHJlbGVhc2UgY29udGFpbnMgdmFyaW91cyBjaGFuZ2VzIHRoYXQgaW1wcm92ZSBjb3JyZWN0bmVzcyBhbmQgdXNlciBleHBlcmllbmNlLCBidXQgY291bGQgYnJlYWsgc29tZSB3b3JrZmxvd3M7IG1hbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFya2VkIGFzIGJyZWFraW5nIG91dCBvZiBhbiBhYnVuZGFuY2Ugb2YgY2F1dGlvbi4gV2UgZXhwZWN0IG1vc3QgdXNlcnMgdG8gYmUgYWJsZSB0byB1cGdyYWRlIHdpdGhvdXQgbWFraW5nIGNoYW5nZXMuCgojIyMjIyBCcmVha2luZyBjaGFuZ2VzCgotICAgKipVcGRhdGUgYHV2IHZlcnNpb25gIHRvIGRpc3BsYXkgYW5kIHVwZGF0ZSBwcm9qZWN0IHZlcnNpb25zIChbIyYjODIwMzsxMjM0OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyMzQ5KSkqKgoKICAgIFByZXZpb3VzbHksIGB1diB2ZXJzaW9uYCBkaXNwbGF5ZWQgdXYncyB2ZXJzaW9uLiBOb3csIGB1diB2ZXJzaW9uYCB3aWxsIGRpc3BsYXkgb3IgdXBkYXRlIHRoZSBwcm9qZWN0J3MgdmVyc2lvbi4gVGhpcyBpbnRlcmZhY2Ugd2FzIFtoZWF2aWx5IHJlcXVlc3RlZF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9pc3N1ZXMvNjI5OCkgYW5kLCBhZnRlciBtdWNoIGNvbnNpZGVyYXRpb24sIHdlIGRlY2lkZWQgdGhhdCB0cmFuc2l0aW9uaW5nIHRoZSB0b3AtbGV2ZWwgY29tbWFuZCB3YXMgdGhlIGJlc3Qgb3B0aW9uLgoKICAgIEhlcmUncyBhIGJyaWVmIGV4YW1wbGU6CgogICAgYGBgY29uc29sZQogICAgJCB1diBpbml0IGV4YW1wbGUKICAgIEluaXRpYWxpemVkIHByb2plY3QgYGV4YW1wbGVgIGF0IGAuL2V4YW1wbGVgCiAgICAkIGNkIGV4YW1wbGUKICAgICQgdXYgdmVyc2lvbgogICAgZXhhbXBsZSAwLjEuMAogICAgJCB1diB2ZXJzaW9uIC0tYnVtcCBtYWpvcgogICAgZXhhbXBsZSAwLjEuMCA9PiAxLjAuMAogICAgJCB1diB2ZXJzaW9uIC0tc2hvcnQKICAgIDEuMC4wCiAgICBgYGAKCiAgICBJZiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0LCB1diB3aWxsIGZhbGxiYWNrIHRvIHNob3dpbmcgaXRzIG93biB2ZXJzaW9uIHN0aWxsOgoKICAgIGBgYGNvbnNvbGUKICAgICQgdXYgdmVyc2lvbgogICAgd2FybmluZzogZmFpbGVkIHRvIHJlYWQgcHJvamVjdDogTm8gYHB5cHJvamVjdC50b21sYCBmb3VuZCBpbiBjdXJyZW50IGRpcmVjdG9yeSBvciBhbnkgcGFyZW50IGRpcmVjdG9yeQogICAgICBydW5uaW5nIGB1diBzZWxmIHZlcnNpb25gIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGB1diB2ZXJzaW9uYCBjb21tYW5kLgogICAgICB0aGlzIGZhbGxiYWNrIHdpbGwgYmUgcmVtb3ZlZCBzb29uLCBwYXNzIGAtLXByZXZpZXdgIHRvIG1ha2UgdGhpcyBhbiBlcnJvci4KCiAgICB1diAwLjcuMCAoNDQzM2Y0MWM5IDIwMjUtMDQtMjkpCiAgICBgYGAKCiAgICBBcyBkZXNjcmliZWQgaW4gdGhlIHdhcm5pbmcsIGAtLXByZXZpZXdgIGNhbiBiZSB1c2VkIHRvIGVycm9yIGluc3RlYWQ6CgogICAgYGBgY29uc29sZQogICAgJCB1diB2ZXJzaW9uIC0tcHJldmlldwogICAgZXJyb3I6IE5vIGBweXByb2plY3QudG9tbGAgZm91bmQgaW4gY3VycmVudCBkaXJlY3Rvcnkgb3IgYW55IHBhcmVudCBkaXJlY3RvcnkKICAgIGBgYAoKICAgIFRoZSBwcmV2aW91cyBmdW5jdGlvbmFsaXR5IG9mIGB1diB2ZXJzaW9uYCB3YXMgbW92ZWQgdG8gYHV2IHNlbGYgdmVyc2lvbmAuCgotICAgKipBdm9pZCBmYWxsYmFjayB0byBzdWJzZXF1ZW50IGluZGV4ZXMgb24gYXV0aGVudGljYXRpb24gZmFpbHVyZSAoWyMmIzgyMDM7MTI4MDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgwNSkpKioKCiAgICBXaGVuIHVzaW5nIHRoZSBgZmlyc3QtaW5kZXhgIHN0cmF0ZWd5ICh0aGUgZGVmYXVsdCksIHV2IHdpbGwgc3RvcCBzZWFyY2hpbmcgaW5kZXhlcyBmb3IgYSBwYWNrYWdlIG9uY2UgaXQgaXMgZm91bmQgb24gYSBzaW5nbGUgaW5kZXguIFByZXZpb3VzbHksIHV2IGNvbnNpZGVyZWQgYSBwYWNrYWdlIGFzICJtaXNzaW5nIiBmcm9tIGFuIGluZGV4IGR1cmluZyBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcywgc3VjaCBhcyBhbiBIVFRQIDQwMSBvciBIVFRQIDQwMyAobm9ybWFsbHksIG1pc3NpbmcgcGFja2FnZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGFuIEhUVFAgNDA0KS4gVGhpcyBiZWhhdmlvciB3YXMgbW90aXZhdGVkIGJ5IHVudXN1YWwgcmVzcG9uc2VzIGZyb20gc29tZSBwYWNrYWdlIGluZGV4ZXMsIGJ1dCByZWR1Y2VzIHRoZSBzYWZldHkgb2YgdXYncyBpbmRleCBzdHJhdGVneSB3aGVuIGF1dGhlbnRpY2F0aW9uIGZhaWxzLiBOb3csIHV2IHdpbGwgY29uc2lkZXIgYW4gYXV0aGVudGljYXRpb24gZmFpbHVyZSBhcyBhIHN0b3AtcG9pbnQgd2hlbiBzZWFyY2hpbmcgZm9yIGEgcGFja2FnZSBhY3Jvc3MgaW5kZXhlcy4gVGhlIGBpbmRleC5pZ25vcmUtZXJyb3ItY29kZXNgIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvdmVyIHRoZSBleGlzdGluZyBiZWhhdmlvciwgZS5nLjoKCiAgICBgYGB0b21sCiAgICBbW3Rvb2wudXYuaW5kZXhdXQogICAgbmFtZSA9ICJweXRvcmNoIgogICAgdXJsID0gImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2NwdSIKICAgIGlnbm9yZS1lcnJvci1jb2RlcyA9IFs0MDEsIDQwM10KICAgIGBgYAoKICAgIFNpbmNlIFB5VG9yY2gncyBpbmRleGVzIGFsd2F5cyByZXR1cm4gYSBIVFRQIDQwMyBmb3IgbWlzc2luZyBwYWNrYWdlcywgdXYgc3BlY2lhbC1jYXNlcyBpbmRleGVzIG9uIHRoZSBgcHl0b3JjaC5vcmdgIGRvbWFpbiB0byBpZ25vcmUgdGhhdCBlcnJvciBjb2RlIGJ5IGRlZmF1bHQuCgotICAgKipSZXF1aXJlIHRoZSBjb21tYW5kIGluIGB1dnggPG5hbWU+YCB0byBiZSBhdmFpbGFibGUgaW4gdGhlIFB5dGhvbiBlbnZpcm9ubWVudCAoWyMmIzgyMDM7MTE2MDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMTYwMykpKioKCiAgICBQcmV2aW91c2x5LCBgdXZ4YCB3b3VsZCBhdHRlbXB0IHRvIGV4ZWN1dGUgYSBjb21tYW5kIGV2ZW4gaWYgaXQgd2FzIG5vdCBwcm92aWRlZCBieSBhIFB5dGhvbiBwYWNrYWdlLiBGb3IgZXhhbXBsZSwgaWYgd2UgcHJlc3VtZSBgZm9vYCBpcyBhbiBlbXB0eSBQeXRob24gcGFja2FnZSB3aGljaCBwcm92aWRlcyBubyBjb21tYW5kLCBgdXZ4IGZvb2Agd291bGQgaW52b2tlIHRoZSBgZm9vYCBjb21tYW5kIG9uIHRoZSBgUEFUSGAgKGlmIHByZXNlbnQpLiBOb3csIHV2IHdpbGwgZXJyb3IgZWFybHkgaWYgdGhlIGBmb29gIGV4ZWN1dGFibGUgaXMgbm90IHByb3ZpZGVkIGJ5IHRoZSByZXF1ZXN0ZWQgUHl0aG9uIHBhY2thZ2UuIFRoaXMgY2hlY2sgaXMgbm90IGVuZm9yY2VkIHdoZW4gYC0tZnJvbWAgaXMgdXNlZCwgc28gcGF0dGVybnMgbGlrZSBgdXZ4IC0tZnJvbSBmb28gYmFzaCAtYyAiLi4uImAgYXJlIHN0aWxsIHZhbGlkLiB1diBhbHNvIHN0aWxsIGFsbG93cyBgdXZ4IGZvb2Agd2hlcmUgdGhlIGBmb29gIGV4ZWN1dGFibGUgaXMgcHJvdmlkZWQgYnkgYSBkZXBlbmRlbmN5IG9mIGBmb29gIGluc3RlYWQgb2YgYGZvb2AgaXRzZWxmLCBhcyB0aGlzIGlzIGZhaXJseSBjb21tb24gZm9yIHBhY2thZ2VzIHdoaWNoIGRlcGVuZCBvbiBhIGRlZGljYXRlZCBwYWNrYWdlIGZvciB0aGVpciBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLgoKLSAgICoqVXNlIGluZGV4IFVSTCBpbnN0ZWFkIG9mIHBhY2thZ2UgVVJMIGZvciBrZXlyaW5nIGNyZWRlbnRpYWwgbG9va3VwcyAoWyMmIzgyMDM7MTI2NTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY1MSkpKioKCiAgICBXaGVuIGRldGVybWluaW5nIGNyZWRlbnRpYWxzIGZvciBxdWVyeWluZyBhIHBhY2thZ2UgVVJMLCB1diBwcmV2aW91c2x5IHNlbnQgdGhlIGZ1bGwgVVJMIHRvIHRoZSBga2V5cmluZ2AgY29tbWFuZC4gSG93ZXZlciwgc29tZSBrZXlyaW5nIHBsdWdpbnMgZXhwZWN0IHRvIHJlY2VpdmUgdGhlICppbmRleCBVUkwqICh3aGljaCBpcyB1c3VhbGx5IGEgcGFyZW50IG9mIHRoZSBwYWNrYWdlIFVSTCkuIE5vdywgdXYgcmVxdWVzdHMgY3JlZGVudGlhbHMgZm9yIHRoZSBpbmRleCBVUkwgaW5zdGVhZC4gVGhpcyBiZWhhdmlvciBtYXRjaGVzIGBwaXBgLgoKLSAgICoqUmVtb3ZlIGAtLXZlcnNpb25gIGZyb20gc3ViY29tbWFuZHMgKFsjJiM4MjAzOzEzMTA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMDgpKSoqCgogICAgUHJldmlvdXNseSwgdXYgYWxsb3dlZCB0aGUgYC0tdmVyc2lvbmAgZmxhZyBvbiBhcmJpdHJhcnkgc3ViY29tbWFuZHMsIGUuZy4sIGB1diBydW4gLS12ZXJzaW9uYC4gSG93ZXZlciwgdGhlIGAtLXZlcnNpb25gIGZsYWcgaXMgdXNlZnVsIGZvciBvdGhlciBvcGVyYXRpb25zIHNpbmNlIHV2IGlzIGEgcGFja2FnZSBtYW5hZ2VyLiBDb25zZXF1ZW50bHksIHdlJ3ZlIHJlbW92ZWQgdGhlIGAtLXZlcnNpb25gIGZsYWcgZnJvbSBzdWJjb21tYW5kcyDigJQgaXQgaXMgb25seSBhdmFpbGFibGUgYXMgYHV2IC0tdmVyc2lvbmAuCgotICAgKipPbWl0IFB5dGhvbiAzLjcgZG93bmxvYWRzIGZyb20gbWFuYWdlZCB2ZXJzaW9ucyAoWyMmIzgyMDM7MTMwMjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzAyMikpKioKCiAgICBQeXRob24gMy43IGlzIEVPTCBhbmQgbm90IGZvcm1hbGx5IHN1cHBvcnRlZCBieSB1djsgaG93ZXZlciwgUHl0aG9uIDMuNyB3YXMgcHJldmlvdXNseSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIG9uIGEgc3Vic2V0IG9mIHBsYXRmb3Jtcy4KCi0gICAqKlJlamVjdCBub24tUEVQIDc1MSBUT01MIGZpbGVzIGluIGluc3RhbGwsIGNvbXBpbGUsIGFuZCBleHBvcnQgY29tbWFuZHMgKFsjJiM4MjAzOzEzMTIwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMjApLCBbIyYjODIwMzsxMzExOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTE5KSkqKgoKICAgIFByZXZpb3VzbHksIHV2IHRyZWF0ZWQgYXJiaXRyYXJ5IGAudG9tbGAgZmlsZXMgcGFzc2VkIHRvIGNvbW1hbmRzIChlLmcuLCBgdXYgcGlwIGluc3RhbGwgLXIgZm9vLnRvbWxgIG9yIGB1diBwaXAgY29tcGlsZSAtbyBmb28udG9tbGApIGFzIGByZXF1aXJlbWVudHMudHh0YC1mb3JtYXR0ZWQgZmlsZXMuIE5vdywgdXYgd2lsbCBlcnJvciBpbnN0ZWFkLiBJZiB1c2luZyBQRVAgNzUxIGxvY2tmaWxlcywgdXNlIHRoZSBzdGFuZGFyZGl6ZWQgZm9ybWF0IGZvciBjdXN0b20gbmFtZXMgaW5zdGVhZCwgZS5nLiwgYHB5bG9jay5mb28udG9tbGAuCgotICAgKipJZ25vcmUgYXJiaXRyYXJ5IFB5dGhvbiByZXF1ZXN0cyBpbiB2ZXJzaW9uIGZpbGVzIChbIyYjODIwMzsxMjkwOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTA5KSkqKgoKICAgIHV2IGFsbG93cyBhcmJpdHJhcnkgc3RyaW5ncyB0byBiZSB1c2VkIGZvciBQeXRob24gdmVyc2lvbiByZXF1ZXN0cywgaW4gd2hpY2ggdGhleSBhcmUgdHJlYXRlZCBhcyBhbiBleGVjdXRhYmxlIG5hbWUgdG8gc2VhcmNoIGZvciBpbiB0aGUgYFBBVEhgLiBIb3dldmVyLCB1c2luZyB0aGlzIGZvcm0gb2YgcmVxdWVzdCBpbiBgLnB5dGhvbi12ZXJzaW9uYCBmaWxlcyBpcyBub24tc3RhbmRhcmQgYW5kIGNvbmZsaWN0cyB3aXRoIGBweWVudi12aXJ0dWFsZW52YCB3aGljaCB3cml0ZXMgZW52aXJvbm1lbnQgbmFtZXMgdG8gYC5weXRob24tdmVyc2lvbmAgZmlsZXMuIEluIHRoaXMgcmVsZWFzZSwgdXYgd2lsbCBub3cgaWdub3JlIHJlcXVlc3RzIHRoYXQgYXJlIGFyYml0cmFyeSBzdHJpbmdzIHdoZW4gZm91bmQgaW4gYC5weXRob24tdmVyc2lvbmAgZmlsZXMuCgotICAgKipFcnJvciBvbiB1bmtub3duIGRlcGVuZGVuY3kgb2JqZWN0IHNwZWNpZmllcnMgKFsxMjgxMV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODExKSkqKgoKICAgIFRoZSBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgZW50cmllcyBjYW4gaW5jbHVkZSAib2JqZWN0IHNwZWNpZmllcnMiLCBlLmcuIGBzZXQtcGhhc2Vycy10byA9IC4uLmAgaW46CgogICAgYGBgdG9tbAogICAgW2RlcGVuZGVuY3ktZ3JvdXBzXQogICAgZm9vID0gWyJweXBhcnNpbmciXQogICAgYmFyID0gW3tzZXQtcGhhc2Vycy10byA9ICJzdHVuIn1dCiAgICBgYGAKCiAgICBIb3dldmVyLCB0aGUgb25seSBjdXJyZW50IHNwZWMtY29tcGxpYW50IG9iamVjdCBzcGVjaWZpZXIgaXMgYGluY2x1ZGUtZ3JvdXBgLiBQcmV2aW91c2x5LCB1diB3b3VsZCBpZ25vcmUgdW5rbm93biBvYmplY3Qgc3BlY2lmaWVycy4gTm93LCB1diB3aWxsIGVycm9yLgoKLSAgICoqTWFrZSBgLS1mcm96ZW5gIGFuZCBgLS1uby1zb3VyY2VzYCBjb25mbGljdGluZyBvcHRpb25zIChbIyYjODIwMzsxMjY3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjcxKSkqKgoKICAgIFVzaW5nIGAtLW5vLXNvdXJjZXNgIGFsd2F5cyByZXF1aXJlcyBhIG5ldyByZXNvbHV0aW9uIGFuZCBgLS1mcm96ZW5gIHdpbGwgYWx3YXlzIGZhaWwgd2hlbiB1c2VkIHdpdGggaXQuIE5vdywgdGhpcyBjb25mbGljdCBpcyBlbmNvZGVkIGluIHRoZSBDTEkgb3B0aW9ucyBmb3IgY2xhcml0eS4KCi0gICAqKlRyZWF0IGVtcHR5IGBVVl9QWVRIT05fSU5TVEFMTF9ESVJgIGFuZCBgVVZfVE9PTF9ESVJgIGFzIHVuc2V0IChbIyYjODIwMzsxMjkwN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTA3KSwgWyMmIzgyMDM7MTI5MDVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkwNSkpKioKCiAgICBQcmV2aW91c2x5LCB0aGVzZSB2YXJpYWJsZXMgd2VyZSB0cmVhdGVkIGFzIHNldCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuIE5vdywgdXYgd2lsbCBpZ25vcmUgdGhlc2UgdmFyaWFibGVzIHdoZW4gZW1wdHkuIFRoaXMgbWF0Y2hlcyB1didzIGJlaGF2aW9yIGZvciBvdGhlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggY29uZmlndXJlIGRpcmVjdG9yaWVzLgoKIyMjIyMgRW5oYW5jZW1lbnRzCgotICAgRGlzYWxsb3cgbWl4aW5nIHJlcXVpcmVtZW50cyBhY3Jvc3MgUHlUb3JjaCBpbmRleGVzIChbIyYjODIwMzsxMzE3OV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTc5KSkKLSAgIEFkZCBvcHRpb25hbCBtYW5hZ2VkIFB5dGhvbiBhcmNoaXZlIGRvd25sb2FkIGNhY2hlIChbIyYjODIwMzsxMjE3NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyMTc1KSkKLSAgIEFkZCBgcG9ldHJ5LWNvcmVgIGFzIGEgYHV2IGluaXRgIGJ1aWxkIGJhY2tlbmQgb3B0aW9uIChbIyYjODIwMzsxMjc4MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzgxKSkKLSAgIFNob3cgdGFnIGhpbnRzIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgY29tcGF0aWJsZSB3aGVlbCBpbiBgcHlsb2NrLnRvbWxgIChbIyYjODIwMzsxMzEzNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTM2KSkKLSAgIFJlcG9ydCBQeXRob24gdmVyc2lvbnMgaW4gYHB5dmVudi5jZmdgIHZlcnNpb24gbWlzbWF0Y2ggKFsjJiM4MjAzOzEzMDI3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwMjcpKQoKIyMjIyMgQnVnIGZpeGVzCgotICAgQXZvaWQgZXJyb3Jpbmcgb24gb21pdHRlZCB3aGVlbC1vbmx5IHBhY2thZ2VzIGluIGBweWxvY2sudG9tbGAgKFsjJiM4MjAzOzEzMTMyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMxMzIpKQotICAgRml4IGRpc3BsYXkgbmFtZSBmb3IgYHV2eCAtLXZlcnNpb25gIChbIyYjODIwMzsxMzEwOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTA5KSkKLSAgIFJlc3RvcmUgaGFuZGxpbmcgb2YgYXV0aGVudGljYXRpb24gd2hlbiBlbmNvdW50ZXJpbmcgcmVkaXJlY3RzIChbIyYjODIwMzsxMzA1MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDUwKSkKLSAgIFJlc3BlY3QgYnVpbGQgb3B0aW9ucyAoYC0tbm8tYmluYXJ5YCBldCBhbCkgaW4gYHB5bG9jay50b21sYCAoWyMmIzgyMDM7MTMxMzRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzEzNCkpCi0gICBVc2UgYHVwbG9hZC10aW1lYCByYXRoZXIgdGhhbiBgdXBsb2FkX3RpbWVgIGluIGB1di5sb2NrYCAoWyMmIzgyMDM7MTMxNzZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzE3NikpCgojIyMjIyBEb2N1bWVudGF0aW9uCgotICAgQ2hhbmdlZCBgZmlzaGAgY29tcGxldGlvbnMgYXBwZW5kIGA+PmAgdG8gb3ZlcndyaXRlIGA+YCAoWyMmIzgyMDM7MTMxMzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzEzMCkpCi0gICBBZGQgYHB5bG9jay50b21sYCBtZW50aW9ucyB3aGVyZSByZWxldmFudCAoWyMmIzgyMDM7MTMxMTVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzExNSkpCi0gICBBZGQgUk9DbSBleGFtcGxlIHRvIHRoZSBQeVRvcmNoIGd1aWRlIChbIyYjODIwMzsxMzIwMF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsMTMyMDApKQotICAgVXBncmFkZSBQeVRvcmNoIGd1aWRlIHRvIENVREEgMTIuOCBhbmQgUHlUb3JjaCAyLjcgKFsjJiM4MjAzOzEzMTk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwxMzE5OSkpCgojIyMgW2B2MC42LjE3YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9ibG9iL0hFQUQvQ0hBTkdFTE9HLm1kIzA2MTcpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvY29tcGFyZS8wLjYuMTYuLi4wLjYuMTcpCgojIyMjIyBQcmV2aWV3IGZlYXR1cmVzCgotICAgQWRkIFB5VG9yY2ggdjIuNy4wIHRvIEdQVSBiYWNrZW5kIChbIyYjODIwMzsxMzA3Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDcyKSkKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIEF2b2lkIHBhbmljIGZvciBpbnZhbGlkIFB5dGhvbiB2ZXJzaW9ucyAoWyMmIzgyMDM7MTMwNzddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzA3NykpCi0gICBCbG9jayBzY3JpcHRzIGZyb20gb3ZlcndyaXRpbmcgYHB5dGhvbmAgKFsjJiM4MjAzOzEzMDUxXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwNTEpKQotICAgQ2hlY2sgZGlzdHJpYnV0aW9uIG5hbWVzIHRvIGhhbmRsZSBpbnZhbGlkIHJlZGlyZWN0cyAoWyMmIzgyMDM7MTI5MTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkxNykpCi0gICBDaGVjayBmb3IgbWlzbWF0Y2hlZCBwYWNrYWdlIGFuZCBkaXN0cmlidXRpb24gbmFtZXMgb24gcmVzb2x2ZXIgdGhyZWFkIChbIyYjODIwMzsxMzA4OF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDg4KSkKLSAgIEZpeCBwYW5pYyB3aXRoIGludmFsaWQgbGFzdCBjaGFyYWN0ZXIgaW4gUEVQIDUwOCBuYW1lIChbIyYjODIwMzsxMzEwNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMTA1KSkKLSAgIFJlamVjdCBgcmVxdWlyZXMtcHl0aG9uYCBldmVuIGlmIG5vdCBsaXN0ZWQgb24gdGhlIGluZGV4IHBhZ2UgKFsjJiM4MjAzOzEzMDg2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwODYpKQoKIyMjIFtgdjAuNi4xNmBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvdGFnLzAuNi4xNikKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9jb21wYXJlLzAuNi4xNS4uLjAuNi4xNikKCiMjIyMgUmVsZWFzZSBOb3RlcwoKIyMjIyMgQnVnIGZpeGVzCgotICAgUmV2ZXJ0ICJQcm9wZXJseSBoYW5kbGUgYXV0aGVudGljYXRpb24gZm9yIDMwMiByZWRpcmVjdCBVUkxzIiAoWyMmIzgyMDM7MTMwNDFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzA0MSkpCgojIyMjIEluc3RhbGwgdXYgMC42LjE2CgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBzaGVsbCBzY3JpcHQKCmBgYHNoCmN1cmwgLS1wcm90byAnPWh0dHBzJyAtLXRsc3YxLjIgLUxzU2YgaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtaW5zdGFsbGVyLnNoIHwgc2gKYGBgCgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBwb3dlcnNoZWxsIHNjcmlwdAoKYGBgc2gKcG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtYyAiaXJtIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWluc3RhbGxlci5wczEgfCBpZXgiCmBgYAoKIyMjIyBEb3dubG9hZCB1diAwLjYuMTYKCnwgIEZpbGUgIHwgUGxhdGZvcm0gfCBDaGVja3N1bSB8CnwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18CnwgW3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEFwcGxlIFNpbGljb24gbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3opIHwgSW50ZWwgbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hYXJjaDY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgQVJNNjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4ODYgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4NjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgQVJNNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDg2IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBQUEM2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1wb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjRMRSBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBTMzkweCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3opIHwgQVJNdjcgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNi91di1hYXJjaDY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgQVJNNjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4ODYgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4NjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm0tdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjYgTVVTTCBMaW51eCAoSGFyZGZsb2F0KSB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE2L3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjcgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTYvdXYtYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKCiMjIyBbYHYwLjYuMTVgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2Jsb2IvSEVBRC9DSEFOR0VMT0cubWQjMDYxNSkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9jb21wYXJlLzAuNi4xNC4uLjAuNi4xNSkKClRoaXMgcmVsZWFzZSBpbmNsdWRlcyBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgYHB5bG9jay50b21sYCBmaWxlIGZvcm1hdCwgYXMgc3RhbmRhcmRpemVkIGluIFtQRVAgNzUxXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDc1MS8pLiBgcHlsb2NrLnRvbWxgIGlzIGFuIGFsdGVybmF0aXZlIHJlc29sdXRpb24gb3V0cHV0IGZvcm1hdCBpbnRlbmRlZCB0byByZXBsYWNlIGByZXF1aXJlbWVudHMudHh0YCAoZS5nLiwgaW4gdGhlIGNvbnRleHQgb2YgYHV2IHBpcCBjb21waWxlYCwgd2hlcmVieSBhICJsb2NrZWQiIGByZXF1aXJlbWVudHMudHh0YCBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIGEgc2V0IG9mIGlucHV0IHJlcXVpcmVtZW50cykuIGBweWxvY2sudG9tbGAgaXMgc3RhbmRhcmRpemVkIGFuZCB0b29sLWFnbm9zdGljLCBzdWNoIHRoYXQgaW4gdGhlIGZ1dHVyZSwgYHB5bG9jay50b21sYCBmaWxlcyBnZW5lcmF0ZWQgYnkgdXYgY291bGQgYmUgaW5zdGFsbGVkIGJ5IG90aGVyIHRvb2xzLCBhbmQgdmljZSB2ZXJzYS4KCkFzIG9mIHRoaXMgcmVsZWFzZSwgYHB5bG9jay50b21sYCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZvbGxvd2luZyBjb21tYW5kczoKCi0gICBUbyBleHBvcnQgYSBgdXYubG9ja2AgdG8gdGhlIGBweWxvY2sudG9tbGAgZm9ybWF0LCBydW46IGB1diBleHBvcnQgLW8gcHlsb2NrLnRvbWxgCi0gICBUbyBnZW5lcmF0ZSBhIGBweWxvY2sudG9tbGAgZmlsZSBmcm9tIGEgc2V0IG9mIHJlcXVpcmVtZW50cywgcnVuOiBgdXYgcGlwIGNvbXBpbGUgLW8gcHlsb2NrLnRvbWwgcmVxdWlyZW1lbnRzLmluYAotICAgVG8gaW5zdGFsbCBmcm9tIGEgYHB5bG9jay50b21sYCBmaWxlLCBydW46IGB1diBwaXAgc3luYyBweWxvY2sudG9tbGAgb3IgYHV2IHBpcCBpbnN0YWxsIC1yIHB5bG9jay50b21sYAoKIyMjIyMgRW5oYW5jZW1lbnRzCgotICAgQWRkIFBFUCA3NTEgc3VwcG9ydCB0byBgdXYgcGlwIGNvbXBpbGVgIChbIyYjODIwMzsxMzAxOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDE5KSkKLSAgIEFkZCBgdXYgZXhwb3J0YCBzdXBwb3J0IGZvciBQRVAgNzUxIChbIyYjODIwMzsxMjk1NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTU1KSkKLSAgIEFjY2VwdCBgcmVxdWlyZW1lbnRzLnR4dGAgKHZlcmJhdGltKSBhcyBhIGZvcm1hdCBvbiB0aGUgQ0xJIChbIyYjODIwMzsxMjk1N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTU3KSkKLSAgIEFkZCBgVVZfTk9fRURJVEFCTEVgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCBgLS1uby1lZGl0YWJsZWAgb24gYWxsIGludm9jYXRpb25zIChbIyYjODIwMzsxMjc3M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzczKSkKLSAgIEFkZCBgcHlsb2NrLnRvbWxgIHRvIGB1diBwaXAgaW5zdGFsbGAgYW5kIGB1diBwaXAgc3luY2AgKFsjJiM4MjAzOzEyOTkyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5OTIpKQotICAgQWRkIGEgYnJpZWYgc2xlZXAgYmVmb3JlIHNlbmRpbmcgYFNJR0lOVGAgdG8gY2hpbGQgcHJvY2Vzc2VzIChbIyYjODIwMzsxMzAxOF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEzMDE4KSkKLSAgIEFkZCB1cGxvYWQgdGltZSB0byBgdXYubG9ja2AgKFsjJiM4MjAzOzEyOTY4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NjgpKQotICAgQWxsb3cgdXBkYXRpbmcgR2l0IHNvdXJjZXMgYnkgbmFtZSAoWyMmIzgyMDM7MTI4OTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjg5NykpCi0gICBDYWNoZSBgd2hpY2ggZ2l0YCBpbiBgdXYgaW5pdGAgKFsjJiM4MjAzOzEyODkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4OTMpKQotICAgRW5hYmxlIGAtLWRyeS1ydW5gIHdpdGggYC0tbG9ja2VkYCAvIGAtLWZyb3plbmAgZm9yIGB1diBzeW5jYCAoWyMmIzgyMDM7MTI3NzhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc3OCkpCi0gICBJbmZlciBvdXRwdXQgdHlwZSBpbiBgdXYgZXhwb3J0YCAoWyMmIzgyMDM7MTI5NThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk1OCkpCi0gICBNYWtlIGB1diBpbml0YCByZXNpbGllbnQgYWdhaW5zdCBicm9rZW4gZ2l0IChbIyYjODIwMzsxMjg5NV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODk1KSkKLSAgIFJlc3BlY3QgYnVpbGQgY29uc3RyYWludHMgZm9yIGB1diBydW4gLS13aXRoYCBkZXBlbmRlbmNpZXMgKFsjJiM4MjAzOzEyODgyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4ODIpKQotICAgU3BsaXQgVVZfSU5ERVggb24gYWxsIHdoaXRlc3BhY2UgKFsjJiM4MjAzOzEyODIwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MjApKQotICAgU3VwcG9ydCBidWlsZCBjb25zdHJhaW50cyBpbiBgdXYgdG9vbGAgYW5kIFBFUDcyMyBzY3JpcHRzLiAoWyMmIzgyMDM7MTI4NDJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjg0MikpCi0gICBVc2Ugc3VmZml4IGZyb20gYHV2eGAgYmluYXJ5IHdoZW4gc2VhcmNoaW5nIGZvciB1diBiaW5hcnkgKFsjJiM4MjAzOzEyOTIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MjMpKQotICAgVXBkYXRlIHZlcnNpb24gZm9ybWF0dGluZyB0byB1c2UgY3lhbiBjb2xvciAoWyMmIzgyMDM7MTI5NDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk0MykpCi0gICBBZGQgZGVidWcgbG9ncyBmb3IgdmVyc2lvbiBmaWxlIHNlYXJjaCAoWyMmIzgyMDM7MTI5NTFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk1MSkpCi0gICBGaXggYFNvdXJjZU5vdEFsbG93ZWRgIGVycm9yIG1lc3NhZ2UgZHVyaW5nIFB5dGhvbiBkaXNjb3ZlcnkgKFsjJiM4MjAzOzEzMDEyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwMTIpKQotICAgT2JmdXNjYXRlIHBhc3N3b3JkIGluIGNyZWRlbnRpYWxzIGRlYnVnIG1lc3NhZ2VzIChbIyYjODIwMzsxMjk0NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTQ0KSkKLSAgIE9iZnVzY2F0ZSBwb3NzaWJsZSB0b2tlbnMgaW4gVVJMIGxvZ3MgKFsjJiM4MjAzOzEyOTY5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NjkpKQotICAgVmFsaWRhdGUgdGhhdCBQRVAgNzUxIGVudHJpZXMgZG9uJ3QgaW5jbHVkZSBtdWx0aXBsZSBzb3VyY2VzIChbIyYjODIwMzsxMjk5M10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTkzKSkKCiMjIyMjIFByZXZpZXcgZmVhdHVyZXMKCi0gICBCdWlsZCBiYWNrZW5kOiBBZGQgcmVmZXJlbmNlIGRvY3MgYW5kIHNjaGVtYSAoWyMmIzgyMDM7MTI4MDNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgwMykpCgojIyMjIyBCdWcgZml4ZXMKCi0gICBBbGlnbiBzdXBwb3J0ZWQgYGNvbmZpZy1zZXR0aW5nc2Agd2l0aCBleGFtcGxlIGluIGRvY3MgKFsjJiM4MjAzOzEyOTQ3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5NDcpKQotICAgRW5zdXJlIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgY29tcGF0aWJsZSB3aXRoIGludGVycHJldGVyIG9uIHN5bmMgKFsjJiM4MjAzOzEyODg0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4ODQpKQotICAgRml4IGBQeXRob25Eb3dubG9hZFJlcXVlc3RgIHBhcnNpbmcgZm9yIHBhcnRpYWwga2V5cyAoWyMmIzgyMDM7MTI5MjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkyNSkpCi0gICBGaXggcHJlLXJlbGVhc2UgZXhjbHVzaXZlIGNvbXBhcmlzb24gb3BlcmF0b3IgaW4gYHV2LXBlcDQ0MGAgKFsjJiM4MjAzOzEyODM2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MzYpKQotICAgRm9yd2FyZCBhZGRpdGlvbmFsIHNpZ25hbHMgdG8gdGhlIGNoaWxkIHByb2Nlc3MgaW4gYHV2IHJ1bmAgKFsjJiM4MjAzOzEzMDE3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTMwMTcpKQotICAgT21pdCBQRVAgNzUxIHZlcnNpb24gZm9yIHNvdXJjZSB0cmVlcyAoWyMmIzgyMDM7MTMwMzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMzAzMCkpCi0gICBQYXRjaCBgQ0NgIGFuZCBgQ0NYYCBlbnRyaWVzIGluIHN5c2NvbmZpZyBmb3IgY3Jvc3MtY29tcGlsZWQgYGFhcmNoNjRgIFB5dGhvbiBkaXN0cmlidXRpb25zIChbIyYjODIwMzsxMjIzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyMjM5KSkKLSAgIFByb3Blcmx5IGhhbmRsZSBhdXRoZW50aWNhdGlvbiBmb3IgSFRUUCAzMDIgcmVkaXJlY3QgVVJMcyAoWyMmIzgyMDM7MTI5MjBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkyMCkpCi0gICBTZXQgNE1CIHN0YWNrIHNpemUgZm9yIGFsbCB0aHJlYWRzLCBpbnRyb2R1Y2UgYFVWX1NUQUNLX1NJWkVgIChbIyYjODIwMzsxMjgzOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODM5KSkKLSAgIFNob3cgUHlQeSBkb3dubG9hZHMgZHVyaW5nIGB1diBweXRob24gbGlzdGAgKFsjJiM4MjAzOzEyOTE1XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MTUpKQotICAgQWRkIGBzdWJkaXJlY3RvcnlgIHRvIERpcmVjdCBVUkwgZm9yIGxvY2FsIGRpcmVjdG9yaWVzIChbIyYjODIwMzsxMjk3MV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyOTcxKSkKLSAgIFByZWZlciBzdGFibGUgcmVsZWFzZXMgb3ZlciBwcmUtcmVsZWFzZXMgaW4gYHV2IHB5dGhvbiBpbnN0YWxsYCAoWyMmIzgyMDM7MTIxOTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjE5NCkpCi0gICBXcml0ZSByZXF1ZXN0ZWQgUHl0aG9uIHZhcmlhbnQgdG8gcGluIGZpbGUgaW4gYHV2IGluaXRgIChbIyYjODIwMzsxMjg3MF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODcwKSkKCiMjIyMjIERvY3VtZW50YXRpb24KCi0gICBGaXggQ0xJIHJlZmVyZW5jZSB3aXRoIGNvZGUgYmxvY2sgKFsjJiM4MjAzOzEyODA3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MDcpKQotICAgRml4IGxvY2tmaWxlIG5vdGUgKFsjJiM4MjAzOzEyNzkzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3OTMpKQotICAgRml4IHR5cG8gaW4gYSByZWZlcmVuY2UgKFsjJiM4MjAzOzEyODU4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4NTgpKQotICAgSW1wcm92ZSBkb2NzIGZvciBgdXYgcHl0aG9uIGxpc3QgLS1vbmx5LWRvd25sb2Fkc2AgYW5kIGAtLW9ubHktaW5zdGFsbGVkYCAoWyMmIzgyMDM7MTI5MTZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjkxNikpCi0gICBVcGRhdGUgbm90ZSBvbiBsYWNrIG9mIG11c2wgZGlzdHJpYnV0aW9ucyB0byBBUk0tb25seSAoWyMmIzgyMDM7MTI4MjVdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgyNSkpCi0gICBBZGQgc2VjdGlvbiBvbiBzaGViYW5ncyBmb3Igc2NyaXB0cyAoWyMmIzgyMDM7MTE1NTNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMTU1MykpCi0gICBEaXNwbGF5IGFsaWFzZXMgZm9yIGxvbmcgYW5kIHNob3J0IGFyZ3MgaW4gdGhlIENMSSByZWZlcmVuY2UgKFsjJiM4MjAzOzEyODI0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MjQpKQotICAgRml4IGhpZ2hsaWdodCBsaW5lIGluIGV4cGxpY2l0IGluZGV4IGRvY3VtZW50YXRpb24gKFsjJiM4MjAzOzEyODg3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4ODcpKQotICAgQWRkIGV4cGxpY2l0IHNvdXJjZSAobWF0Y2hpbmcgUHlUb3JjaCBndWlkZSkgKFsjJiM4MjAzOzEyODQ0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4NDQpKQotICAgRml4IGxpbmsgdG8gaXNzdWUgKFsjJiM4MjAzOzEyODIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI4MjMpKQotICAgRml4IGdyYW1tYXRpY2FsIGVycm9yIGluIEZhc3RBUEkgZ3VpZGUgKFsjJiM4MjAzOzEyOTA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI5MDgpKQotICAgQWRkIGAtLWxvY2tlZGAgdG8gYHV2IHN5bmNgIGluIEdpdEh1YiBBY3Rpb25zIGd1aWRlIChbIyYjODIwMzsxMjgxOV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyODE5KSkKLSAgIEltcHJvdmUgZm9ybWF0dGluZyBmb3IgYCJhbGwiYCBgZGVmYXVsdC1ncm91cHNgIHNldHRpbmcgZG9jdW1lbnRhdGlvbiAoWyMmIzgyMDM7MTI5NjNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjk2MykpCi0gICBSZXBsYWNlIGAtLWZyb3plbmAgd2l0aCBgLS1sb2NrZWRgIGluIERvY2tlciBpbnRlZ3JhdGlvbiBndWlkZSAoWyMmIzgyMDM7MTI4MThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjgxOCkpCgojIyMgW2B2MC42LjE0YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy90YWcvMC42LjE0KQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2NvbXBhcmUvMC42LjEzLi4uMC42LjE0KQoKIyMjIyBSZWxlYXNlIE5vdGVzCgojIyMjIyBQeXRob24gdmVyc2lvbnMKClRoZSBmb2xsb3dpbmcgUHl0aG9uIHZlcnNpb25zIGhhdmUgYmVlbiBhZGRlZDoKCi0gICBDUHl0aG9uIDMuMTMuMwotICAgQ1B5dGhvbiAzLjEyLjEwCi0gICBDUHl0aG9uIDMuMTEuMTIKLSAgIENQeXRob24gMy4xMC4xNwotICAgQ1B5dGhvbiAzLjkuMjIKClNlZSB0aGUgW2BweXRob24tYnVpbGQtc3RhbmRhbG9uZWAgcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC9weXRob24tYnVpbGQtc3RhbmRhbG9uZS9yZWxlYXNlcy90YWcvMjAyNTA0MDkpIGZvciBtb3JlIGRldGFpbHMuCgojIyMjIyBFbmhhbmNlbWVudHMKCi0gICBBZGQgYHV2LWJ1aWxkYCBhbmQgYHV2X2J1aWxkYCBhbGlhc2VzIHRvIGB1diBpbml0IC0tYnVpbGQtYmFja2VuZGAgKFsjJiM4MjAzOzEyNzc2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NzYpKQotICAgRW1pdCBkZWRpY2F0ZWQgZXJyb3IgbWVzc2FnZSBmb3IgQ29uZGEgYGVudmlyb25tZW50LnltbGAgZmlsZXMgKFsjJiM4MjAzOzEyNjY5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NjkpKQoKIyMjIyMgUHJldmlldyBmZWF0dXJlcwoKLSAgIEJ1aWxkIGJhY2tlbmQ6IENoZWNrIG1vZHVsZSBkaXIgZXhpc3RzIGZvciBzZGlzdCBidWlsZCAoWyMmIzgyMDM7MTI3NzldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc3OSkpCi0gICBCdWlsZCBiYWNrZW5kOiBGaXggc2Rpc3Qgd2l0aCBsb25nIGRpcmVjdG9yaWVzIChbIyYjODIwMzsxMjc2NF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzY0KSkKCiMjIyMjIFBlcmZvcm1hbmNlCgotICAgQXZvaWQgcXVlcnlpbmcgR2l0SHViIG9uIHJlcGVhdGVkIGluc3RhbGwgaW52b2NhdGlvbnMgKFsjJiM4MjAzOzEyNzY3XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NjcpKQoKIyMjIyMgQnVnIGZpeGVzCgotICAgRXJyb3Igd2hlbiBgdG9vbC51di5zb3VyY2VzYCBpcyBzZXQgaW4gc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gZmlsZSAoWyMmIzgyMDM7MTI3NTddKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjc1NykpCi0gICBTcGxpdCB3b3Jrc3BhY2UgbWVtYmVycyBvbnRvIHRoZWlyIG93biBsaW5lcyBpbiBgdXYgaW5pdGAgKFsjJiM4MjAzOzEyNzU2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3NTYpKQoKIyMjIyMgRG9jdW1lbnRhdGlvbgoKLSAgIEFkZCBsb2NrZmlsZSBub3RlIGFib3V0IFBFUCA3NTEgKFsjJiM4MjAzOzEyNzMyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI3MzIpKQotICAgRXh0ZW5kIHRoZSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBmb3IgYHV2IHBpcCBzeW5jYCAoWyMmIzgyMDM7MTI2ODNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY4MykpCi0gICBGaXggbWlzbWF0Y2hlZCBwaXAgaW50ZXJmYWNlIGhlYWRlciAvIG5hdiB0aXRsZXMgKFsjJiM4MjAzOzEyNjQwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NDApKQoKIyMjIHV2IDAuNi4xNAoKIyMjIyBJbnN0YWxsIHV2IDAuNi4xNAoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgc2hlbGwgc2NyaXB0CgpgYGBzaApjdXJsIC0tcHJvdG8gJz1odHRwcycgLS10bHN2MS4yIC1Mc1NmIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWluc3RhbGxlci5zaCB8IHNoCmBgYAoKIyMjIyMgSW5zdGFsbCBwcmVidWlsdCBiaW5hcmllcyB2aWEgcG93ZXJzaGVsbCBzY3JpcHQKCmBgYHNoCnBvd2Vyc2hlbGwgLUV4ZWN1dGlvblBvbGljeSBCeXBhc3MgLWMgImlybSBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pbnN0YWxsZXIucHMxIHwgaWV4IgpgYGAKCiMjIyMgRG93bmxvYWQgdXYgMC42LjE0Cgp8ICBGaWxlICB8IFBsYXRmb3JtIHwgQ2hlY2tzdW0gfAp8LS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfAp8IFt1di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5neikgfCBBcHBsZSBTaWxpY29uIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEludGVsIG1hY09TIHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwKSB8IEFSTTY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDg2IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgeDY0IFdpbmRvd3MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcC5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IEFSTTY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWk2ODYtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg4NiBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IFBQQzY0TEUgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXBvd2VycGM2NGxlLXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUzM5MHggTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6KSB8IHg2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6KSB8IEFSTXY3IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTQvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6KSB8IEFSTTY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDg2IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgeDY0IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY2IE1VU0wgTGludXggKEhhcmRmbG9hdCkgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFybS11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xNC91di1hcm12Ny11bmtub3duLWxpbnV4LW11c2xlYWJpaGYudGFyLmd6KSB8IEFSTXY3IE1VU0wgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjE0L3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CgojIyMgW2B2MC42LjEzYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy90YWcvMC42LjEzKQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L2NvbXBhcmUvMC42LjEyLi4uMC42LjEzKQoKIyMjIyBSZWxlYXNlIE5vdGVzCgojIyMjIyBFbmhhbmNlbWVudHMKCi0gICBBZGQgYC0tc2hvdy12ZXJzaW9uYCB0byBgdXYgcHl0aG9uIGZpbmRgIChbIyYjODIwMzsxMjM3Nl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyMzc2KSkKLSAgIFJlbW92ZSBgLS1uby1jb25maWdgIHdhcm5pbmcgZnJvbSBgdXYgcGlwIGNvbXBpbGVgIGFuZCBgdXYgcGlwIHN5bmNgIChbIyYjODIwMzsxMjY0Ml0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjQyKSkKLSAgIFNraXAgcmVwZWF0ZWQgZGlyZWN0b3JpZXMgaW4gYFBBVEhgIHdoZW4gc2VhcmNoaW5nIGZvciBQeXRob24gaW50ZXJwcmV0ZXJzIChbIyYjODIwMzsxMjM2N10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyMzY3KSkKLSAgIFVuc2V0IGBTQ1JJUFRfUEFUSGAgaW4gcmVsb2NhdGFibGUgYWN0aXZhdGlvbiBzY3JpcHQgKFsjJiM4MjAzOzEyNjcyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2NzIpKQotICAgQWRkIGBVVl9QWVRIT05fRE9XTkxPQURTX0pTT05fVVJMYCB0byBzZXQgY3VzdG9tIG1hbmFnZWQgcHl0aG9uIHNvdXJjZXMgKFsjJiM4MjAzOzEwOTM5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTA5MzkpKQotICAgUmVqZWN0IGBweXByb2plY3QudG9tbGAgZmlsZXMgaW4gYHV2IHBpcCBjb21waWxlIC1vYCAoWyMmIzgyMDM7MTI2NzNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY3MykpCi0gICBSZXNwZWN0IHRoZSBgLS1vZmZsaW5lYCBmbGFnIGZvciBHaXQgb3BlcmF0aW9ucyAoWyMmIzgyMDM7MTI2MTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjYxOSkpCgojIyMjIyBCdWcgZml4ZXMKCi0gICBXYXJuIGluc3RlYWQgb2YgZXJyb3IgaWYgQ1JDIGFwcGVhcnMgdG8gYmUgbWlzc2luZyAoWyMmIzgyMDM7MTI3MjJdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjcyMikpCi0gICBBdm9pZCBpbmZpbml0ZSBsb29wIGluIGB1diBleHBvcnRgIHdpdGggY29uZmxpY3RzIChbIyYjODIwMzsxMjcyNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNzI2KSkKCiMjIyMjIFJ1c3QgQVBJCgotICAgVXBkYXRlIE1TUlYgdG8gMS44NCAoWyMmIzgyMDM7MTI2NzBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjY3MCkpCgojIyMgdXYgMC42LjEzCgojIyMjIEluc3RhbGwgdXYgMC42LjEzCgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBzaGVsbCBzY3JpcHQKCmBgYHNoCmN1cmwgLS1wcm90byAnPWh0dHBzJyAtLXRsc3YxLjIgLUxzU2YgaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtaW5zdGFsbGVyLnNoIHwgc2gKYGBgCgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBwb3dlcnNoZWxsIHNjcmlwdAoKYGBgc2gKcG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtYyAiaXJtIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWluc3RhbGxlci5wczEgfCBpZXgiCmBgYAoKIyMjIyBEb3dubG9hZCB1diAwLjYuMTMKCnwgIEZpbGUgIHwgUGxhdGZvcm0gfCBDaGVja3N1bSB8CnwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18CnwgW3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEFwcGxlIFNpbGljb24gbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3opIHwgSW50ZWwgbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hYXJjaDY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgQVJNNjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4ODYgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4NjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgQVJNNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDg2IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBQUEM2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1wb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjRMRSBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBTMzkweCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3opIHwgQVJNdjcgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMy91di1hYXJjaDY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgQVJNNjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4ODYgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4NjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm0tdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjYgTVVTTCBMaW51eCAoSGFyZGZsb2F0KSB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEzL3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjcgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTMvdXYtYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKCiMjIyBbYHYwLjYuMTJgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL3RhZy8wLjYuMTIpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvY29tcGFyZS8wLjYuMTEuLi4wLjYuMTIpCgojIyMjIFJlbGVhc2UgTm90ZXMKCiMjIyMjIEVuaGFuY2VtZW50cwoKLSAgIFJlcG9ydCB0aGUgcXVlcmllZCBleGVjdXRhYmxlIHBhdGggaW4gYHV2IHB5dGhvbiBsaXN0YCAoWyMmIzgyMDM7MTI2MjhdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjYyOCkpCi0gICBJbXByb3ZlIGFyY2hpdmUgdW5wYWNrIGVycm9yIG1lc3NhZ2VzIChbIyYjODIwMzsxMjYyN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9wdWxsLzEyNjI3KSkKCiMjIyMjIEJ1ZyBmaXhlcwoKLSAgIFJlc3BlY3QgYGF1dGhlbnRpY2F0ZWAgd2hlbiB1c2luZyBgZXhwbGljaXQgPSB0cnVlYCAoWyMmIzgyMDM7MTI2MzFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjYzMSkpCi0gICBOb3JtYWxpemUgZXh0cmEgYW5kIGdyb3VwIG5hbWVzIGluIGB1diBhZGRgIGFuZCBgdXYgcmVtb3ZlYCAoWyMmIzgyMDM7MTI1ODZdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjU4NikpCi0gICBFbmZvcmNlIENSQy0zMiBjaGVja3Mgd2hlbiB1bnBhY2tpbmcgYXJjaGl2ZXMgKFsjJiM4MjAzOzEyNjIzXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2MjMpKQotICAgRml4IHBhcnNpbmcgb2YgYHB5dGhvbi1wbGF0Zm9ybWAgaW4gc2V0dGluZ3MgZmlsZXMgKFsjJiM4MjAzOzEyNTkyXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI1OTIpKQoKIyMjIyMgRG9jdW1lbnRhdGlvbgoKLSAgIEFkZCBub3RlIGFib3V0IGB1diBidWlsZGAgdG8gYHBhY2thZ2UgPSBmYWxzZWAgKFsjJiM4MjAzOzEyNjA4XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3B1bGwvMTI2MDgpKQotICAgQWRkIGluZGV4IGZhbGxiYWNrIG5vdGUgdG8gYGF1dGhlbnRpY2F0ZSA9IGFsd2F5c2AgZG9jdW1lbnRhdGlvbiAoWyMmIzgyMDM7MTI0OThdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjQ5OCkpCi0gICBGaXggaW52YWxpZCAna2luZCcgcmVmZXJlbmNlIGluIGZsYXQgaW5kZXggZG9jcyAoWyMmIzgyMDM7MTI1ODNdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcHVsbC8xMjU4MykpCgojIyMgdXYgMC42LjEyCgojIyMjIEluc3RhbGwgdXYgMC42LjEyCgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBzaGVsbCBzY3JpcHQKCmBgYHNoCmN1cmwgLS1wcm90byAnPWh0dHBzJyAtLXRsc3YxLjIgLUxzU2YgaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtaW5zdGFsbGVyLnNoIHwgc2gKYGBgCgojIyMjIyBJbnN0YWxsIHByZWJ1aWx0IGJpbmFyaWVzIHZpYSBwb3dlcnNoZWxsIHNjcmlwdAoKYGBgc2gKcG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IEJ5cGFzcyAtYyAiaXJtIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWluc3RhbGxlci5wczEgfCBpZXgiCmBgYAoKIyMjIyBEb3dubG9hZCB1diAwLjYuMTIKCnwgIEZpbGUgIHwgUGxhdGZvcm0gfCBDaGVja3N1bSB8CnwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18CnwgW3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYWFyY2g2NC1hcHBsZS1kYXJ3aW4udGFyLmd6KSB8IEFwcGxlIFNpbGljb24gbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWFhcmNoNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYteDg2XF82NC1hcHBsZS1kYXJ3aW4udGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di14ODZcXzY0LWFwcGxlLWRhcndpbi50YXIuZ3opIHwgSW50ZWwgbWFjT1MgfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LXg4NlxfNjQtYXBwbGUtZGFyd2luLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di1hYXJjaDY0LXBjLXdpbmRvd3MtbXN2Yy56aXApIHwgQVJNNjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYWFyY2g2NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1pNjg2LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWk2ODYtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4ODYgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtaTY4Ni1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXBjLXdpbmRvd3MtbXN2Yy56aXBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LXg4NlxfNjQtcGMtd2luZG93cy1tc3ZjLnppcCkgfCB4NjQgV2luZG93cyB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYteDg2XF82NC1wYy13aW5kb3dzLW1zdmMuemlwLnNoYTI1NikgfAp8IFt1di1hYXJjaDY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgQVJNNjQgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtaTY4Ni11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDg2IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di1pNjg2LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBQUEM2NCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di1wb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgUFBDNjRMRSBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di1zMzkweC11bmtub3duLWxpbnV4LWdudS50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LXMzOTB4LXVua25vd24tbGludXgtZ251LnRhci5neikgfCBTMzkweCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtczM5MHgtdW5rbm93bi1saW51eC1nbnUudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYteDg2XF82NC11bmtub3duLWxpbnV4LWdudS50YXIuZ3opIHwgeDY0IExpbnV4IHwgW2NoZWNrc3VtXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di14ODZcXzY0LXVua25vd24tbGludXgtZ251LnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYXJtdjctdW5rbm93bi1saW51eC1nbnVlYWJpaGYudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di1hcm12Ny11bmtub3duLWxpbnV4LWdudWVhYmloZi50YXIuZ3opIHwgQVJNdjcgTGludXggfCBbY2hlY2tzdW1dKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWFybXY3LXVua25vd24tbGludXgtZ251ZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKfCBbdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vYXN0cmFsLXNoL3V2L3JlbGVhc2VzL2Rvd25sb2FkLzAuNi4xMi91di1hYXJjaDY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3opIHwgQVJNNjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1pNjg2LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWk2ODYtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4ODYgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtaTY4Ni11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di14ODZcXzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LXg4NlxfNjQtdW5rbm93bi1saW51eC1tdXNsLnRhci5neikgfCB4NjQgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYteDg2XF82NC11bmtub3duLWxpbnV4LW11c2wudGFyLmd6LnNoYTI1NikgfAp8IFt1di1hcm0tdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nel0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjYgTVVTTCBMaW51eCAoSGFyZGZsb2F0KSB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYXJtLXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3ouc2hhMjU2KSB8CnwgW3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3pdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYvcmVsZWFzZXMvZG93bmxvYWQvMC42LjEyL3V2LWFybXY3LXVua25vd24tbGludXgtbXVzbGVhYmloZi50YXIuZ3opIHwgQVJNdjcgTVVTTCBMaW51eCB8IFtjaGVja3N1bV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2FzdHJhbC1zaC91di9yZWxlYXNlcy9kb3dubG9hZC8wLjYuMTIvdXYtYXJtdjctdW5rbm93bi1saW51eC1tdXNsZWFiaWhmLnRhci5nei5zaGEyNTYpIHwKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgo8c3VtbWFyeT5wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMgKG5ldGJveC1wbHVnaW4tZG5zKTwvc3VtbWFyeT4KCiMjIyBbYHYxLjMuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcmVsZWFzZXMvdGFnLzEuMy4wKTogTmV0Qm94IDQuMyBDb21wYXRpYmlsaXR5IFJlbGVhc2UgMS4zLjAKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21wYXJlLzEuMi4xMS4uLjEuMy4wKQoKTmV0Qm94IEROUyAxLjMuMCBhZGRzIHN1cHBvcnQgZm9yIE5ldEJveCA0LjMuIE9sZGVyIHZlcnNpb25zIG9mIE5ldEJveCBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIHRoaXMgcmVsZWFzZS4KCkFwYXJ0IGZyb20gdGhhdCwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyByZWxhdGl2ZSB0byB0aGUgbGFzdCAxLjIgcmVsZWFzZSAxLjIuMTEuCgpJbXBsZW1lbnRlZCBHcmFwaFFMIGVudW1zIGFuZCBmaWx0ZXJzIGNvbXBhdGlibGUgd2l0aCBOZXRCb3ggNC4zIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21taXQvNzM1ZGFlNGM2ZTg2NzU2MjhlOTNlZjY3MTJkMTUxYmNhZjNlZGU0OQpBZGRlZCBOZXRCb3ggNC4zIEdyYXBoUUwgc3VwcG9ydCBmb3IgRE5TU0VDIG1vZGVscyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tbWl0LzczNWRhZTRjNmU4Njc1NjI4ZTkzZWY2NzEyZDE1MWJjYWYzZWRlNDkKUmVvcmdhbmlzZWQgYW5kIGVuaGFuY2VkIEdyYXBoUUwgZmlsdGVycyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tbWl0L2YxZDRhMTY5OWIyNDA0ZmNhNGNiZGZkNmEzZWU2MzZhYTIxYWIyZjQKQWRqdXN0ZWQgdG8gbmV3IE9iamVjdENvbnRhY3RzTWl4aW4gYmVoYXZpb3VyIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21taXQvZGVmMDY5ZTI0Y2VkODM2ZWU4MjhjNzBiMTA0NGM0OTg2YjJkNDVjMQpVcGRhdGVkIGNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24gZm9yIFJlbGVhc2UgMS4zIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21taXQvMGYxOTZhNmM1YzgwMzJjN2IzNTlmMjRiYTY0NDlkOTk4NDMxZGUwNwpSZW1vdmVkIGRlZmF1bHRfcmV0dXJuX3VybCBmcm9tIGFsbCBtb2RlbCB2aWV3cyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tbWl0L2RiYzkwNDM0MGIxMDIwZjQ2ZjVhMGJkY2ExNGFlNjg1NDc5NjUyNDAKUmVtb3ZlZCB2ZXJzaW9uIGRlcGVuZGVuY3kgZnJvbSBxdWlja19hZGQgdXNlIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21taXQvZmQxMGE5MTYwNzAwODgzMTQ3YTI0YzRlZjc2YjM1MWY5MjJhYzU0YQpGaXhlZCBHcmFwaFFMIGZpbHRlciBmb3IgRE5TU0VDS2V5VGVtcGxhdGUgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbW1pdC9hMTMxZjY5ZWJkN2I1MDAwMWY3OGRkZGZjNTQyZDAzMDNjNmVjNjZlClVuaWZpZWQgb3JkZXJpbmcgb2YgY29kZSBlbGVtZW50ZSAoTWV0YSBjbGFzcyBldGMuKSBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tbWl0L2YyYjI0ZmI1N2Q1YTcwNGRlMjg0N2NjZjMxNzkxMWM5NWRlN2NkYmYKUmVwbGFjZWQgcmVkdW5kYW50IGV4cGxpY2l0IGZpZWxkIGRlZmluaXRpb25zIHdpdGggbGFiZWxzL2hlbHBfdGV4dHMgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbW1pdC8zMGNkMDE4NDY0ODg3ZjZkYjZlMmRiM2JlOGQ2YjQwY2ZiOTYwODJhCgoqKkZ1bGwgQ2hhbmdlbG9nKio6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuMTEuLi5tYWluCgojIyMgW2B2MS4yLjExYF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9yZWxlYXNlcy90YWcvMS4yLjExKTogQnVnZml4IFJlbGVhc2UgMS4yLjExCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuMTAuLi4xLjIuMTEpCgojIyMjIFdoYXQncyBDaGFuZ2VkCgotICAgU2V0IHRoZSB0ZW5hbnQgc2VyaWFsaXNlciB0byBuZXN0ZWQgZXZlcnl3aGVyZSBpdCBpcyB1c2VkIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MTldKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MTkpCgoqKkZ1bGwgQ2hhbmdlbG9nKio6IGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuMTAuLi4xLjIuMTEKCiMjIyBbYHYxLjIuMTBgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3JlbGVhc2VzL3RhZy8xLjIuMTApCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuOS4uLjEuMi4xMCkKCiMjIyMgV2hhdCdzIENoYW5nZWQKCi0gICBEZWNsYXJlZCBwYXJlbnRhbF9hZ2VudHMgYSBTT0EgY2xlYW4gZmllbGQgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxMikKLSAgIEZpeCBkZXRlY3Rpb24gb2YgaW52YWxpZCBkb3VibGUgZGFzaGVzIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MTRdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MTQpCi0gICBVcGRhdGVkIGFuZCBmaXhlZCB0cmFuc2xhdGlvbnMgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxNV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxNSkKLSAgIEZpeGVkIHRoZSBmcmVuY2ggdHJhbnNsYXRpb24gYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxNl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYxNikKCioqRnVsbCBDaGFuZ2Vsb2cqKjogaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21wYXJlLzEuMi45Li4uMS4yLjEwCgojIyMgW2B2MS4yLjlgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3JlbGVhc2VzL3RhZy8xLjIuOSk6IEZlYXR1cmUgcmVsZWFzZSAxLjIuOQoKW0NvbXBhcmUgU291cmNlXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbXBhcmUvMS4yLjguLi4xLjIuOSkKCiMjIyMgV2hhdCdzIENoYW5nZWQKCi0gICBSZWRlc2lnbmVkIHRoZSByZWNvcmQgQ2hvaWNlU2V0cyBhbmQgY3JlYXRlZCB0aGUgYGN1c3RvbV9yZWNvcmRfdHlwZXNgIG9wdGlvbiBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTk5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTk5KQotICAgUHJvdmlkZSBhIGRlZmF1bHQgbGlzdCBvZiBmaWx0ZXJlZCBSUlRZUEVzIGJ5IFtAJiM4MjAzO3BldGVlY2tlbF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbCkgaW4gW2h0dHBzOi8vZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvcHVsbC82MDEpCi0gICBzbGlnaHQgY2hhbmdlIG9mIHdvcmRpbmcgYnkgW0AmIzgyMDM7anBtZW5zXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vanBtZW5zKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwMl0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwMikKLSAgIEFkZGVkIHRoZSBvcHRpb24gdG8gcmVtb3ZlIHNwZWNpZmljIHJlY29yZCB0eXBlcyBmcm9tIHRoZSBmaWx0ZXIgbGlzdCBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA0XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA0KQotICAgSW50cm9kdWNlZCBjaGVjayBmb3IgU09BLXNhZmUgZmllbGRzIGFuZCBhZGRlZCB0ZXN0cyBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA2XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA2KQotICAgQWRkZWQgdGhlIHBhcmVudGFsX2FnZW50cyBmaWVsZCB0byBETlNTRUNQb2xpY3kgYnkgW0AmIzgyMDM7cGV0ZWVja2VsXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsKSBpbiBbaHR0cHM6Ly9naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwN10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9wdWxsLzYwNykKLSAgIE1vdmVkIHRoZSBwYXJlbnRhbF9hZ2VudHMgZmllbGQgZnJvbSBETlNTRUNQb2xpY3kgdG8gWm9uZSBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNjA5KQoKKipGdWxsIENoYW5nZWxvZyoqOiBodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL2NvbXBhcmUvMS4yLjcuLi4xLjIuOQoKIyMjIFtgdjEuMi44YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9jb21wYXJlLzEuMi43Li4uMS4yLjgpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuNy4uLjEuMi44KQoKIyMjIFtgdjEuMi43YF0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BldGVlY2tlbC9uZXRib3gtcGx1Z2luLWRucy9yZWxlYXNlcy90YWcvMS4yLjcpOiBGZWF0dXJlL0J1Z2ZpeCBSZWxlYXNlIDEuMi43CgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwvbmV0Ym94LXBsdWdpbi1kbnMvY29tcGFyZS8xLjIuNi4uLjEuMi43KQoKIyMjIyBETlNTRUMKClRoaXMgaXMgcmVsZWFzZSBhZGRzIEROU1NFQyBzdXBwb3J0IGZvciBOZXRCb3ggRE5TLgoKTmV0Qm94IEROUyBzdXBwb3J0cyB0aGUgbWFuYWdlbWVudCBvZiBETlNTRUMgaW4gYXMgbXVjaCBhcyBETlNTRUMgS2V5IFRlbXBsYXRlcyBhbmQgRE5TU0VDIFBvbGljaWVzIGNhbiBiZSBzdG9yZWQgaW4gTmV0Qm94IEROUyBhbmQgYXNzaWduZWQgdG8gem9uZXMuIEl0IGRvZXMgbm90LCBob3dldmVyLCBzdXBwb3J0IHpvbmUgc2lnbmluZyBub3Igc3RvcmluZyBjcnlwdG9ncmFwaGljIG1hdGVyaWFsIGluIHRoZSBOZXRCb3ggZGF0YWJhc2UuIFRoZXJlIGFyZSB0d28gbWFpbiByZWFzb25zIGZvciB0aGlzIGNvbmNlcHQ6CgoxLiAgU3RvcmluZyBjcnlwdG9ncmFwaGljIG1hdGVyaWFsIGluIGEgZGF0YSBzb3VyY2UgZm9yIGF1dG9tYXRpb24gaXMgZ2VuZXJhbGx5IHByb2JsZW1hdGljLiBXaGlsZSB0aGVyZSBpcyB0aGUgTmV0Qm94IFNlY3JldHMgcGx1Z2luLCBpdCBpcyBiZXR0ZXIgcHJhY3RpY2UgdG8gc3RvcmUgY29uZmlkZW50aWFsIGRhdGEgaW4gdmF1bHQgc3lzdGVtcyBzcGVjaWZpY2FsbHkgY3JlYXRlZCBmb3IgdGhpcyBwdXJwb3NlLiAoSW4gc29tZSBjYXNlcyB0aGUga2V5cyBhcmUgc3RvcmVkIGluIEhTTXMgYXMgYW4gYWRkZWQgbWV0aG9kIG9mIHByb3RlY3Rpb24uKQoyLiAgSW4gdHlwaWNhbCBtb2Rlcm4gc2NlbmFyaW9zLCBzaWduaW5nIHNlcnZlcnMgbWFpbnRhaW4ga2V5cyBhbmQgc2lnbiByZWNvcmRzLCBzbyBzdWNoIGNvbmZpZ3VyYXRpb25zIGRvIG5vdCBldmVuIHJlcXVpcmUgaGF2aW5nIE5ldEJveCBETlMgcHJvdmlkZSBrZXlzIG9yIGNyZWF0ZSB0aGUgc2lnbmF0dXJlcyBmcm9tIHdpdGhpbiBOZXRCb3ggRE5TLgoKQWRkaXRpb25hbGx5LCB0aGVyZSBpcyBubyBkaXJlY3QgaW50ZWdyYXRpb24gYmV0d2VlbiBOZXRCb3ggYW5kIGFueSBnaXZlbiBuYW1lIHNlcnZlciBpbXBsZW1lbnRhdGlvbiwgc28gYW4gaW50ZXJmYWNlIGZvciBwcm92aWRpbmcgc2lnbmVkIHpvbmVzIHRvIGEgbmFtZSBzZXJ2ZXIgaXMgZ2VuZXJhbGx5IG91dCBvZiBzY29wZSBmb3IgTmV0Qm94IEROUywganVzdCBhcyBpdCBpcyB0aGUgY2FzZSBmb3Igc2VydmluZyBwbGFpbiBETlMuIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIHVzaW5nIHNwZWNpZmljIHNvbHV0aW9ucyBhZGFwdGVkIHRvIHRoZSB1c2UgY2FzZSBhbmQgdGhlIG5hbWUgc2VydmVyIGltcGxlbWVudGF0aW9uIHVzZWQuCgpBcyBub3RlZCBlYXJsaWVyIHRoZXJlIGFyZSB0d28gZGF0YSBtb2RlbHMgZm9yIEROU1NFQyBpbiBOZXRCb3ggRE5TOiBETlNTRUMgS2V5IFRlbXBsYXRlcyBhbmQgRE5TU0VDIFBvbGljaWVzLiBUaGUgZm9ybWVyIGFyZSB1c2VkIGZvciBzdG9yaW5nIHBhcmFtZXRlcnMgZm9yIEROU1NFQyBLZXlzIHN1Y2ggYXMgdGhlIHR5cGUsIGFsZ29yaXRobSBhbmQgbGlmZXRpbWUsIGFuZCB0aGUgbGF0dGVyIHRvIGRlZmluZSBwb2xpY2llcyB0aGF0IGRldGVybWluZSBob3cgb2Z0ZW4gc2lnbmF0dXJlcyBhcmUgcmVnZW5lcmF0ZWQsIERTIHJlY29yZHMgYXJlIHByb3BhZ2F0ZWQgZXRjLgoKV2hpbGUgdGhlIGltcGxlbWVudGF0aW9uIGlzIG9yaWVudGVkIGxhcmdlbHkgdG93YXJkcyBvcHRpb25zIEJJTkQgOSBwcm92aWRlcywgdGhpcyBpcyBtYWlubHkgYmVjYXVzZSB0aGF0IHNvZnR3YXJlIGhhcyBhIGh1Z2Ugc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgb3RoZXIgcHJvZHVjdHMgYXJlIHVzdWFsbHkgbm90IHZlcnkgZGlmZmVyZW50LCBpbiBtb3N0IGNhc2VzIG1vcmUgbGltaXRlZCB0aGFuIEJJTkQgOS4gR2l2ZW4gdGhlIGxhcmdlIGluc3RhbGxlZCBiYXNlIG9mIEJJTkQgOSwgdGhpcyBpcyBjb25zaWRlcmVkIGEgZ29vZCBiYXNpcy4gKFRoZXJlIGlzLCBob3dldmVyLCBubyByZWFzb24gd2h5IE5ldEJveCBETlMgY2Fubm90IGJlIHVzZWQgdG8gbWFpbnRhaW4gZGF0YSBmb3IsIHNheSwgS25vdC1ETlMgb3IgUG93ZXJETlMuKQoKRm9yIGEgc3VtbWFyeSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHNlZSBbdGhpcyBibG9ncG9zdF0oaHR0cHM6Ly9qcG1lbnMubmV0LzIwMjUvMDMvMTYvZG5zc2VjLXBvbGljeS1hbmQta2V5LXRlbXBsYXRlLXN1cHBvcnQtaW4tbmV0Ym94LWRucy8pIGJ5IFtAJiM4MjAzO2pwbWVuc10oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL2pwbWVucykuCgojIyMjIFdoYXQncyBDaGFuZ2VkCgotICAgU09BIE1OQU1FIG11c3QgYmUgY2hlY2tlZCBpbiB6b25lIGZvcm1zIGlmIHpvbmUgdGVtcGxhdGUgaXMgbm90IHNldCBieSBbQCYjODIwMztwZXRlZWNrZWxdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wZXRlZWNrZWwpIGluIFtodHRwczovL2dpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTg5XShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGV0ZWVja2VsL25ldGJveC1wbHVnaW4tZG5zL3B1bGwvNTg5KQotICAgY29tcGxldGUgZnIgdHJhbnNsYXRpb24gYnkgW0AmIzgyMDM7amVhbjFdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLgoKPC9kZXRhaWxzPgoKLS0tCgojIyMgQ29uZmlndXJhdGlvbgoK8J+ThSAqKlNjaGVkdWxlKio6IEJyYW5jaCBjcmVhdGlvbiAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKSwgQXV0b21lcmdlIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpLgoK8J+apiAqKkF1dG9tZXJnZSoqOiBEaXNhYmxlZCBieSBjb25maWcuIFBsZWFzZSBtZXJnZSB0aGlzIG1hbnVhbGx5IG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQuCgrimbsgKipSZWJhc2luZyoqOiBXaGVuZXZlciBQUiBiZWNvbWVzIGNvbmZsaWN0ZWQsIG9yIHlvdSB0aWNrIHRoZSByZWJhc2UvcmV0cnkgY2hlY2tib3guCgrwn5G7ICoqSW1tb3J0YWwqKjogVGhpcyBQUiB3aWxsIGJlIHJlY3JlYXRlZCBpZiBjbG9zZWQgdW5tZXJnZWQuIEdldCBbY29uZmlnIGhlbHBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9yZW5vdmF0ZWJvdC9yZW5vdmF0ZS9kaXNjdXNzaW9ucykgaWYgdGhhdCdzIHVuZGVzaXJlZC4KCi0tLQoKIC0gWyBdIDwhLS0gcmViYXNlLWNoZWNrIC0tPklmIHlvdSB3YW50IHRvIHJlYmFzZS9yZXRyeSB0aGlzIFBSLCBjaGVjayB0aGlzIGJveAoKLS0tCgpUaGlzIFBSIHdhcyBnZW5lcmF0ZWQgYnkgW01lbmQgUmVub3ZhdGVdKGh0dHBzOi8vbWVuZC5pby9yZW5vdmF0ZS8pLiBWaWV3IHRoZSBbcmVwb3NpdG9yeSBqb2IgbG9nXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2dpdGh1Yi9vc2lzbS9jb250YWluZXItaW1hZ2VzKS4KPCEtLXJlbm92YXRlLWRlYnVnOmV5SmpjbVZoZEdWa1NXNVdaWElpT2lJek9TNHlNRGN1TVNJc0luVndaR0YwWldSSmJsWmxjaUk2SWpNNUxqSTJOQzR3SWl3aWRHRnlaMlYwUW5KaGJtTm9Jam9pYldGcGJpSXNJbXhoWW1Wc2N5STZXeUp5Wlc1dmRtRjBaU0pkZlE9PS0tPgo=
      patchset: 617e4d5c2a6daa685ab68eb055a057ed61cf36c7
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: fa94074a33c2a4b1ff3eaadb063e1f29046bf671
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 34ae850a7303da5bb21907d41439ae6afbc1fe3e
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: f7abfe5b7dfd12b80bc14a21a9dbf0711aea1f3b
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: fa94074a33c2a4b1ff3eaadb063e1f29046bf671
          untrusted/project_2/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 34ae850a7303da5bb21907d41439ae6afbc1fe3e
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/hadolint/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/container-images
        name: osism/container-images
        short_name: container-images
        src_dir: src/github.com/osism/container-images
      projects:
        github.com/osism/container-images:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-images
          checkout: main
          checkout_description: zuul branch
          commit: b3a027fa00713e45c493bee60ec077aa879a006b
          name: osism/container-images
          required: false
          short_name: container-images
          src_dir: src/github.com/osism/container-images
      ref: refs/pull/709/head
      resources: {}
      tenant: osism
      timeout: 1800
      voting: true
