From 3378dd2097cae563c804193f1f25e21a4dcea277 Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Tue, 24 Oct 2023 09:38:58 +0200 Subject: [PATCH] feat: initial commit Signed-off-by: Harald Hoyer --- .github/CODEOWNERS | 4 + .github/workflows/container.yml | 41 + .github/workflows/go.yml | 40 + .github/workflows/nix.yml | 72 ++ .gitignore | 24 + Dockerfile | 53 + LICENSE | 366 +++++++ README.md | 91 ++ SECURITY.md | 70 ++ flake.lock | 65 ++ flake.nix | 52 + go.mod | 229 +++++ go.sum | 1672 +++++++++++++++++++++++++++++++ main.go | 36 + ratee/sgxquote.go | 530 ++++++++++ ratee/sgxquote_test.go | 1491 +++++++++++++++++++++++++++ renovate.json | 6 + tee/backend.go | 61 ++ tee/backend_test.go | 284 ++++++ tee/path_info.go | 40 + tee/path_login.go | 417 ++++++++ tee/path_login_test.go | 145 +++ tee/path_tees.go | 331 ++++++ tee/test-fixtures/keys/cert.pem | 22 + tee/test-fixtures/keys/key.pem | 27 + tee/test_responder.go | 302 ++++++ version/version.go | 7 + 27 files changed, 6478 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/container.yml create mode 100644 .github/workflows/go.yml create mode 100644 .github/workflows/nix.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 ratee/sgxquote.go create mode 100644 ratee/sgxquote_test.go create mode 100644 renovate.json create mode 100644 tee/backend.go create mode 100644 tee/backend_test.go create mode 100644 tee/path_info.go create mode 100644 tee/path_login.go create mode 100644 tee/path_login_test.go create mode 100644 tee/path_tees.go create mode 100644 tee/test-fixtures/keys/cert.pem create mode 100644 tee/test-fixtures/keys/key.pem create mode 100644 tee/test_responder.go create mode 100644 version/version.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..4726128 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +# Each line is a file pattern followed by one or more owners. +# Owners will be automatically notified about new PRs and +# an owner's approval is required to merge to protected branches. +* @haraldh @thomasknauth diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml new file mode 100644 index 0000000..afd829b --- /dev/null +++ b/.github/workflows/container.yml @@ -0,0 +1,41 @@ +name: Container +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + packages: write + contents: read + +jobs: + push_to_registry: + name: Build and push containers image to GitHub Packages + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up env + run: echo "repository_owner=${GITHUB_REPOSITORY_OWNER,,}" >>${GITHUB_ENV} + - name: Build and Push Container + uses: docker/build-push-action@v5 + with: + tags: | + ghcr.io/${{env.repository_owner}}/${{ github.event.repository.name }}:latest + matterlabsrobot/${{ github.event.repository.name }}:latest + push: ${{ github.event_name == 'push' || github.event_name == 'schedule' }} + diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..91c939c --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,40 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: Go + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + + build: + runs-on: ubuntu-latest + steps: + - name: Prep + run: | + wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add - + sudo bash -c 'echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main" > /etc/apt/sources.list.d/intel-sgx.list' + sudo apt -o Acquire::Retries=3 update + sudo apt -o Acquire::Retries=3 install -y --no-install-recommends \ + libsgx-headers \ + libsgx-enclave-common \ + libsgx-urts \ + libsgx-dcap-quote-verify \ + libsgx-dcap-quote-verify-dev + + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: 1.19 + + - name: Build + run: go build -v ./... + + - name: Test + run: go test -v ./... diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 0000000..5f66659 --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,72 @@ +name: nix + +on: + pull_request: + branches: [ "main" ] + paths: + - '**.nix' + - 'go.mod' + - 'go.sum' + - 'flake.lock' + push: + branches: [ "main" ] + paths: + - '**.nix' + - 'go.mod' + - 'go.sum' + - 'flake.lock' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@6a9a9e84a173d90b3ffb42c5ddaf9ea033fad011 # v23 + with: + extra_nix_config: | + access-tokens = github.com=${{ github.token }} + - run: nix flake check -L --show-trace --keep-going + + fmt: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@6a9a9e84a173d90b3ffb42c5ddaf9ea033fad011 # v23 + with: + extra_nix_config: | + access-tokens = github.com=${{ github.token }} + - run: nix fmt + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@6a9a9e84a173d90b3ffb42c5ddaf9ea033fad011 # v23 + with: + extra_nix_config: | + access-tokens = github.com=${{ github.token }} + - uses: cachix/cachix-action@v12 + continue-on-error: true + with: + name: haraldh + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - run: nix build -L . + + develop: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@6a9a9e84a173d90b3ffb42c5ddaf9ea033fad011 # v23 + with: + extra_nix_config: | + access-tokens = github.com=${{ github.token }} + - uses: cachix/cachix-action@v12 + continue-on-error: true + with: + name: haraldh + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - run: nix develop -L -c go test ./... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64f2e1d --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +# IDE +/.idea diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b5fae2b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +FROM docker.io/ubuntu:20.04 AS pluginbuilder + +ARG VERSION=1.20.4 +ARG CGO_ENABLED=1 +ARG BUILD_TAGS="default" +ENV JOBS=2 +RUN set -eux; \ + DEBIAN_FRONTEND=noninteractive apt-get update -y; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl; \ + : + +RUN set -eux; \ + curl -fsSLo /usr/share/keyrings/intel.asc https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key; \ + echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel.asc] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main" > /etc/apt/sources.list.d/intel-sgx.list; \ + DEBIAN_FRONTEND=noninteractive apt-get update; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + rsync \ + pkg-config \ + libssl-dev \ + libcurl4-openssl-dev \ + libprotobuf-dev \ + protobuf-compiler \ + clang \ + libsgx-headers \ + libsgx-dcap-quote-verify-dev \ + ; \ + : + +RUN mkdir /goroot && mkdir /go +RUN curl https://storage.googleapis.com/golang/go${VERSION}.linux-amd64.tar.gz \ + | tar xvzf - -C /goroot --strip-components=1 +ENV GOPATH /go +ENV GOROOT /goroot +ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH + +WORKDIR / + +RUN --mount=type=cache,target=/root/.cache --mount=type=cache,target=/go --mount=type=bind,target=/data \ + set -eux; \ + mkdir -p /go/src/github.com/matter-labs/vault-auth-tee; \ + cd /go/src/github.com/matter-labs/vault-auth-tee; \ + rsync -a --delete-after /data/ ./ ; \ + CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o vault-auth-tee; \ + mkdir -p /opt/vault/plugins; \ + cp vault-auth-tee /opt/vault/plugins/vault-auth-tee; \ + : + +FROM scratch +WORKDIR /opt/vault/plugins + +COPY --from=pluginbuilder /opt/vault/plugins/vault-auth-tee /opt/vault/plugins/vault-auth-tee diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..432aa65 --- /dev/null +++ b/LICENSE @@ -0,0 +1,366 @@ +Copyright (c) 2015 HashiCorp, Inc. +Copyright (c) 2023 Matter Labs + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..dbb88df --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# vault-auth-tee +TEE remote attestation plugin for Hashicorp Vault + +# ⚠️☢️☣️ WARNING: not yet for production use ☣️☢️⚠️ + +## Build Setup + +```bash +$ wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add - +$ sudo bash -c 'echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main" > /etc/apt/sources.list.d/intel-sgx.list' +$ sudo apt update +$ sudo apt install -y --no-install-recommends \ + libsgx-headers \ + libsgx-enclave-common \ + libsgx-urts \ + libsgx-dcap-quote-verify \ + libsgx-dcap-quote-verify-dev +``` + +## Configuration + +`Create` or `Update` via the `${plugin}/tees/$name` endpoint + +```json +{ + "name": "TEE_role_name", + "token_policies": "policy1,policy2,...", + "types": "sgx", + "sgx_mrsigner": "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7e", + "sgx_mrenclave": "18946b3547d3ca036f4df7b516857e28fd512d69fed3411dc660537912faabf8", + "sgx_isv_prodid": 0, + "sgx_min_isv_svn": 0, + "sgx_allowed_tcb_levels": "Ok,ConfigNeeded,OutOfDate,OutOfDateConfigNeeded,SwHardeningNeeded,ConfigAndSwHardeningNeeded" +} +``` + +* At least one of `sgx_mrsigner` or `sgx_mrenclave` must be set. If both are set, both are used for matching. +* `sgx_isv_prodid` is optional and defaults to `0`. +* `sgx_min_isv_svn` is optional and defaults to `0`. +* `sgx_allowed_tcb_levels` is optional and defaults to `Ok`. + +## Authentication + +- Client TEE generates a self-signed TLS client certificate +- Client TEE generates an attestation report, which includes the hash of the public key of the client certificate (in case of SGX, a sha256 sum of the public key) +- Client TEE fetches all collateral material via e.g. Intel DCAP ([`tee_qv_get_collateral`](https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/4cb5c8b81f126f9aa3ee921d7980a909a9bd676d/QuoteVerification/dcap_quoteverify/inc/sgx_dcap_quoteverify.h#L234-L238)) +- Client TEE sends POST request with a TLS connection using the client certificate + to Vault via the `${plugin}/login` endpoint with the name, attestation report and the attestation collateral material +- An optional challenge can be included in the POST request, which is then included in the attestation report of the vault response +```json +{ + "name": "The name of the TEE role to authenticate against.", + "quote": "The quote Base64 encoded.", + "collateral": "The collateral Json string encoded.", + "challenge": "An optional challenge hex encoded." +} +``` + +The response contains the Vault token and, if a challenge was included, +the vault attestation report, which must contain the challenge bytes in the report_data of the quote. +```json +{ + "auth": { + "client_token": "The Vault token.", + "....": "...." + }, + "data": { + "quote": "The vault quote Base64 encoded.", + "collateral": "The vault collateral Json string encoded." + } +} +``` + +### Collateral Json encoding + +See [sgx_ql_lib_common.h](https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/4cb5c8b81f126f9aa3ee921d7980a909a9bd676d/QuoteGeneration/quote_wrapper/common/inc/sgx_ql_lib_common.h#L202-L227) + +```json +{ + "major_version": uint16, + "minor_version": uint16, + "tee_type": uint32, + "pck_crl_issuer_chain": []byte, + "root_ca_crl": []byte, + "pck_crl": []byte, + "tcb_info_issuer_chain": []byte, + "tcb_info": []byte, + "qe_identity_issuer_chain": []byte, + "qe_identity": []byte +} +``` \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e21e51f --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,70 @@ +# Security Policy + +We truly appreciate efforts to discover and disclose security issues responsibly! + +## Vulnerabilities + +We take an impact-first approach instead of a rules-first approach. Therefore, if you believe you found the impactful +issue, please email us at +[security@matterlabs.dev](mailto:security@matterlabs.dev). + +### PGP Key + +The following PGP key may be used to communicate sensitive information to developers: + +Fingerprint: `5FED B2D0 EA2C 4906 DD66 71D7 A2C5 0B40 CE3C F297` + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGEBmQkBEAD6tlkBEZFMvR8kOgxXX857nC2+oTik6TopJz4uCskuqDaeldMy +l+26BBzLkIeO1loS+bzVgnNFJRrGt9gv98MzNEHJVv6D7GsSLlUX/pz7Lxn0J4ry +o5XIk3MQTCUBdaXGs6GBLl5Xe8o+zNj4MKd4zjgDLinITNlE/YZCDsXyvYS3YFTQ +cwaUTNlawkKgw4BLaEqwB2JuyEhI9wx5X7ibjFL32sWMolYsNAlzFQzM09HCurTn +q0DYau9kPJARcEk9/DK2iq0z3gMCQ8iRTDaOWd8IbSP3HxcEoM5j5ZVAlULmjmUE +StDaMPLj0Kh01Tesh/j+vjchPXHT0n4zqi1+KOesAOk7SIwLadHfQMTpkU7G2fR1 +BrA5MtlzY+4Rm6o7qu3dpZ+Nc4iM3FUnaQRpvn4g5nTh8vjG94OCzX8DXWrCKyxx +amCs9PLDYOpx84fXYv4frkWpKh2digDSUGKhoHaOSnqyyvu3BNWXBCQZJ20rqEIu +sXOQMxWIoWCOOPRRvrHrKDA2hpoKjs3pGsProfpVRzb9702jhWpTfbDp9WjQlFtX +2ZIDxlwAxcugClgrp5JiUxvhg2A9lDNwCF7r1e68uNv5usBZQVKPJmnvS2nWgKy8 +x9oJsnwrEjxwiRHd34UvfMkwY9RENSJ+NoXqBdS7Lwz4m6vgbzq6K56WPQARAQAB +tCRaa1N5bmMgU2VjdXJpdHkgPHNlY3VyaXR5QHprc3luYy5pbz6JAk4EEwEKADgW +IQRf7bLQ6ixJBt1mcdeixQtAzjzylwUCYQGZCQIbAwULCQgHAgYVCgkICwIEFgID +AQIeAQIXgAAKCRCixQtAzjzyl5y8EAC/T3oq88Dak2b+5TlWdU2Gpm6924eAqlMt +y1KksDezzNQUlPiCUVllpin2PIjU/S+yzMWKXJA04LoVkEPfPOWjAaavLOjRumxu +MR6P2dVUg1InqzYVsJuRhKSpeexzNA5qO2BPM7/I2Iea1IoJPjogGbfXCo0r5kne +KU7a5GEa9eDHxpHTsbphQe2vpQ1239mUJrFpzAvILn6jV1tawMn5pNCXbsa8l6l2 +gtlyQPdOQECy77ZJxrgzaUBcs/RPzUGhwA/qNuvpF0whaCvZuUFMVuCTEu5LZka2 +I9Rixy+3jqBeONBgb+Fiz5phbiMX33M9JQwGONFaxdvpFTerLwPK2N1T8zcufa01 +ypzkWGheScFZemBxUwXwK4x579wjsnfrY11w0p1jtDgPTnLlXUA2mom4+7MyXPg0 +F75qh6vU1pdXaCVkruFgPVtIw+ccw2AxD50iZQ943ZERom9k165dR9+QxOVMXQ4P +VUxsFZWvK70/s8TLjsGljvSdSOa85iEUqSqh0AlCwIAxLMiDwh5s/ZgiHoIM6Xih +oCpuZyK9p0dn+DF/XkgAZ/S91PesMye3cGm6M5r0tS26aoc2Pk6X37Hha1pRALwo +MOHyaGjc/jjcXXxv6o55ALrOrzS0LQmLZ+EHuteCT15kmeY3kqYJ3og62KgiDvew +dKHENvg7d7kCDQRhAZleARAA6uD6WfdqGeKV5i170+kLsxR3QGav0qGNAbxpSJyn +iHQ8u7mQk3S+ziwN2AAopfBk1je+vCWtEGC3+DWRRfJSjLbtaBG8e6kLP3/cGA75 +qURz6glTG4nl5fcEAa6B1st0OxjVWiSLX3g/yjz8lznQb9awuRjdeHMnyx5DsJUN +d+Iu5KxGupQvKGOMKivSvC8VWk9taaQRpRF+++6stLCDk3ZtlxiopMs3X2jAp6xG +sOBbix1cv9BTsfaiL7XDL/gviqBPXYY5L42x6+jnPo5lROfnlLYkWrv6KZr7HD4k +tRXeaSwxLD2EkUyb16Jpp0be/ofvBtITGUDDLCGBiaXtx/v8d52MARjsyLJSYloj +1yiW01LfAiWHUC4z5jl2T7E7sicrlLH1M8Z6WbuqjdeaYwtfyPA2YCKr/3fn6pIo +D+pYaBSESmhA92P+XVaf5y2BZ6Qf8LveDpWwsVGdBGh9T0raA1ooe1GESLjmIjUa +z5AeQ/uXL5Md9I6bpMUUJYQiH19RPcFlJriI3phXyyf6Wlkk8oVEeCWyzcmw+x1V +deRTvE2x4WIwKGLXRNjin2j1AP7vU2HaNwlPrLijqdyi68+0irRQONoH7Qonr4ca +xWgL+pAaa3dWxf0xqK7uZFp4aTVWlr2uXtV/eaUtLmGMCU0jnjb109wg5L0F7WRT +PfEAEQEAAYkCNgQYAQoAIBYhBF/tstDqLEkG3WZx16LFC0DOPPKXBQJhAZleAhsM +AAoJEKLFC0DOPPKXAAEP/jK7ch9GkoaYlsuqY/aHtxEwVddUDOxjyn3FMDoln85L +/n8AmLQb2bcpKSqpaJwMbmfEyr5MDm8xnsBTfx3u6kgaLOWfKxjLQ6PM7kgIMdi4 +bfaRRuSEI1/R6c/hNpiGnzAeeexldH1we+eH1IVmh4crdat49S2xh7Qlv9ahvgsP +LfKl3rJ+aaX/Ok0AHzhvSfhFpPr1gAaGeaRt+rhlZsx2QyG4Ez8p2nDAcAzPiB3T +73ENoBIX6mTPfPm1UgrRyFKBqtUzAodz66j3r6ebBlWzIRg8iZenVMAxzjINAsxN +w1Bzfgsi5ZespfsSlmEaa7jJkqqDuEcLa2YuiFAue7Euqwz1aGeq1GfTicQioSCb +Ur/LGyz2Mj3ykbaP8p5mFVcUN51yQy6OcpvR/W1DfRT9SHFT/bCf9ixsjB2HlZGo +uxPJowwqmMgHd755ZzPDUM9YDgLI1yXdcYshObv3Wq537JAxnZJCGRK4Y8SwrMSh +8WRxlaM0AGWXiJFIDD4bQPIdnF3X8w0cGWE5Otkb8mMHOT+rFTVlDODwm1zF6oIG +PTwfVrpiZBwiUtfJol1exr/MzSPyGoJnYs3cRf2E3O+D1LbcR8w0LbjGuUy38Piz +ZO/vCeyJ3JZC5kE8nD+XBA4idwzh0BKEfH9t+WchQ3Up9rxyzLyQamoqt5Xby4pY +=xkM3 +-----END PGP PUBLIC KEY BLOCK----- +``` + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..fa4f541 --- /dev/null +++ b/flake.lock @@ -0,0 +1,65 @@ +{ + "nodes": { + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1694102001, + "narHash": "sha256-vky6VPK1n1od6vXbqzOXnekrQpTL4hbPAwUhT5J9c9E=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "9e21c80adf67ebcb077d75bd5e7d724d21eeafd6", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "mynixpkgs": { + "locked": { + "lastModified": 1694694534, + "narHash": "sha256-8xmRrzjyT3ZWt+sCegaKRx+PIkB1W69G+CBz3Atf35A=", + "owner": "haraldh", + "repo": "nixpkgs", + "rev": "15d456e58b39f691d4815101723d2a767853f8da", + "type": "github" + }, + "original": { + "owner": "haraldh", + "ref": "intel-dcap-openssl", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1694499547, + "narHash": "sha256-R7xMz1Iia6JthWRHDn36s/E248WB1/je62ovC/dUVKI=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e5f018cf150e29aac26c61dac0790ea023c46b24", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "gitignore": "gitignore", + "mynixpkgs": "mynixpkgs", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..79df513 --- /dev/null +++ b/flake.nix @@ -0,0 +1,52 @@ +{ + description = "vault auth plugin for remote attestation of TEEs"; + + inputs = { + # for libsgx-dcap-quote-verify + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + mynixpkgs.url = + "github:haraldh/nixpkgs/intel-dcap-openssl"; + gitignore = { + url = "github:hercules-ci/gitignore.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, gitignore, mynixpkgs, ... }: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { inherit system; }; + mypkgs = import mynixpkgs { inherit system; }; + bin = pkgs.buildGoModule { + buildInputs = with mypkgs; [ sgx-sdk libsgx-dcap-quote-verify ]; + + CGO_CFLAGS = + "-I${mypkgs.libsgx-dcap-quote-verify.dev}/include -I${mypkgs.sgx-sdk}/include"; + LDFLAGS = "-L${mypkgs.libsgx-dcap-quote-verify.dev}/lib"; + + name = "vault-auth-tee"; + src = gitignore.lib.gitignoreSource ./.; + vendorSha256 = "sha256-aRflg1OJKPXJifDoitRLT+MQLVpRH4NzsHb+OsT0Iqw="; + }; + dockerImage = pkgs.dockerTools.buildImage { + name = "vault-auth-tee"; + tag = "latest"; + copyToRoot = [ + bin + # pkgs.vault + ]; + #config = { Cmd = [ "${bin}/bin/vault" ]; }; + }; + in + with pkgs; { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt; + packages.x86_64-linux = { + inherit bin dockerImage; + default = bin; + }; + devShells.x86_64-linux.default = mkShell { + inputsFrom = [ bin ]; + buildInputs = with pkgs; [ dive go_1_19 gotools mypkgs.sgx-sdk mypkgs.libsgx-dcap-quote-verify ]; + }; + }; +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..9da9ae8 --- /dev/null +++ b/go.mod @@ -0,0 +1,229 @@ +module github.com/matter-labs/vault-auth-tee + +go 1.19 + +require ( + github.com/hashicorp/go-hclog v1.5.0 + github.com/hashicorp/go-rootcerts v1.0.2 + github.com/hashicorp/vault v1.14.1 + github.com/hashicorp/vault/api v1.9.2 + github.com/hashicorp/vault/sdk v0.9.2-0.20230704151349-7522ca248f90 + github.com/stretchr/testify v1.8.4 + golang.org/x/crypto v0.12.0 +) + +require ( + cloud.google.com/go/compute v1.19.3 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.0.1 // indirect + cloud.google.com/go/kms v1.10.2 // indirect + cloud.google.com/go/monitoring v1.13.0 // indirect + github.com/Azure/azure-sdk-for-go v67.2.0+incompatible // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.29 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.22 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect + github.com/Jeffail/gabs v1.1.1 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/NYTimes/gziphandler v1.1.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.62.301 // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef // indirect + github.com/aws/aws-sdk-go v1.44.268 // indirect + github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/boombuler/barcode v1.0.1 // indirect + github.com/cenkalti/backoff/v3 v3.2.2 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible // indirect + github.com/circonus-labs/circonusllhist v0.1.3 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba // indirect + github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc // indirect + github.com/digitalocean/godo v1.7.5 // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74 // indirect + github.com/emicklei/go-restful/v3 v3.10.1 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-openapi/analysis v0.20.0 // indirect + github.com/go-openapi/errors v0.20.1 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect + github.com/go-openapi/loads v0.20.2 // indirect + github.com/go-openapi/runtime v0.19.24 // indirect + github.com/go-openapi/spec v0.20.3 // indirect + github.com/go-openapi/strfmt v0.20.0 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/validate v0.20.2 // indirect + github.com/go-ozzo/ozzo-validation v3.6.0+incompatible // indirect + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/go-test/deep v1.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-metrics-stackdriver v0.2.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/s2a-go v0.1.4 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.9.1 // indirect + github.com/gophercloud/gophercloud v0.1.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/eventlogger v0.2.1 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0 // indirect + github.com/hashicorp/go-kms-wrapping/v2 v2.0.9 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/aead/v2 v2.0.7-1 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/alicloudkms/v2 v2.0.1 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.7 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.7 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.8 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/ocikms/v2 v2.0.7 // indirect + github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.7 // indirect + github.com/hashicorp/go-memdb v1.3.3 // indirect + github.com/hashicorp/go-msgpack v1.1.5 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-plugin v1.4.9 // indirect + github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a // indirect + github.com/hashicorp/go-retryablehttp v0.7.2 // indirect + github.com/hashicorp/go-secure-stdlib/awsutil v0.2.3 // indirect + github.com/hashicorp/go-secure-stdlib/base62 v0.1.2 // indirect + github.com/hashicorp/go-secure-stdlib/mlock v0.1.3 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 // indirect + github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/hcl v1.0.1-vault-5 // indirect + github.com/hashicorp/hcp-sdk-go v0.23.0 // indirect + github.com/hashicorp/mdns v1.0.4 // indirect + github.com/hashicorp/raft v1.3.10 // indirect + github.com/hashicorp/raft-autopilot v0.2.0 // indirect + github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c // indirect + github.com/hashicorp/raft-snapshot v1.0.4 // indirect + github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/huandu/xstrings v1.4.0 // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f // indirect + github.com/jefferai/jsonx v1.0.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kelseyhightower/envconfig v1.4.0 // indirect + github.com/klauspost/compress v1.16.5 // indirect + github.com/linode/linodego v0.7.1 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/miekg/dns v1.1.43 // indirect + github.com/mitchellh/cli v1.1.2 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/okta/okta-sdk-golang/v2 v2.12.1 // indirect + github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect + github.com/oracle/oci-go-sdk/v60 v60.0.0 // indirect + github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect + github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pires/go-proxyproto v0.6.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/posener/complete v1.2.3 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/rboyer/safeio v0.2.1 // indirect + github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/sasha-s/go-deadlock v0.2.0 // indirect + github.com/sethvargo/go-limiter v0.7.1 // indirect + github.com/shirou/gopsutil/v3 v3.22.6 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d // indirect + github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/tencentcloud/tencentcloud-sdk-go v1.0.162 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect + github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c // indirect + github.com/vmware/govmomi v0.18.0 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.etcd.io/bbolt v1.3.7 // indirect + go.mongodb.org/mongo-driver v1.11.6 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/api v0.124.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6 // indirect + google.golang.org/grpc v1.55.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.66.2 // indirect + gopkg.in/resty.v1 v1.12.0 // indirect + gopkg.in/square/go-jose.v2 v2.6.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.27.2 // indirect + k8s.io/apimachinery v0.27.2 // indirect + k8s.io/client-go v0.27.2 // indirect + k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 // indirect + nhooyr.io/websocket v1.8.7 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..edc4746 --- /dev/null +++ b/go.sum @@ -0,0 +1,1672 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v1.19.3 h1:DcTwsFgGev/wV5+q8o2fzgcHOaac+DKGC91ZlvpsQds= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/kms v1.10.2 h1:8UePKEypK3SQ6g+4mn/s/VgE5L7XOh+FwGGRUqvY3Hw= +cloud.google.com/go/kms v1.10.2/go.mod h1:9mX3Q6pdroWzL20pbK6RaOdBbXBEhMNgK4Pfz2bweb4= +cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTgeiff9vxdrfdqxibzpWjxLnuXDI5m6z3GJAk= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= +github.com/Azure/azure-sdk-for-go v44.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v67.2.0+incompatible h1:Uu/Ww6ernvPTrpq31kITVTIm/I5jlJ1wjtEH/bmSB2k= +github.com/Azure/azure-sdk-for-go v67.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/msi/armmsi v1.1.0 h1:Q707jfTFqfunSnh73YkCBDXR3GQJKno3chPRxXw//ho= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= +github.com/Azure/azure-storage-blob-go v0.15.0 h1:rXtgp8tN1p29GvpGgfJetavIG0V7OgcSXPpwp3tx6qk= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.11.0/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= +github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.22 h1:/GblQdIudfEM3AWWZ0mrYJQSd7JS4S/Mbzh6F0ov0Xc= +github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.0/go.mod h1:QRTvSZQpxqm8mSErhnbI+tANIBAKP7B+UIE2z4ypUO0= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.0/go.mod h1:JljT387FplPzBA31vUcvsetLKF3pec5bdAxjVU4kI2s= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 h1:0W/yGmFdTIT77fvdlGZ0LMISoLHFJ7Tx4U0yeB+uFs4= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.3.0/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E= +github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec h1:vV3RryLxt42+ZIVOFbYJCH1jsZNTNmj2NYru5zfx+4E= +github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/SAP/go-hdb v0.14.1 h1:hkw4ozGZ/i4eak7ZuGkY5e0hxiXFdNUBNhr4AvZVNFE= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af h1:DBNMBMuMiWYu0b+8KMJuWmfCkcxl09JwdlqwDZZ6U14= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.301 h1:8mgvCpqsv3mQAcqZ/baAaMGUBj5J6MKMhxLd+K8L27Q= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.301/go.mod h1:Api2AkmMgGaSUAhmk76oaFObkoeCPc/bKAqcyplPODs= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 h1:q4dksr6ICHXqG5hm0ZW5IHyeEJXoIJSOZeBLmWPNeIQ= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.34.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= +github.com/aws/aws-sdk-go v1.44.268 h1:WoK20tlAvsvQzTcE6TajoprbXmTbcud6MjhErL4P/38= +github.com/aws/aws-sdk-go v1.44.268/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v1.17.7 h1:CLSjnhJSTSogvqUGhIC6LqFKATMRexcxLZ0i/Nzk9Eg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 h1:dK82zF6kkPeCo8J1e+tGx4JdvDIQzj7ygIoLg8WMuGs= +github.com/aws/aws-sdk-go-v2/credentials v1.13.18 h1:EQMdtHwz0ILTW1hoP+EwuWhwCG1hD6l3+RWFQABET4c= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59 h1:E3Y+OfzOK1+rmRo/K2G0ml8Vs+Xqk0kOnf4nS0kUtBc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 h1:sJLYcS+eZn5EeNINGHSCRAwUJMFVqklwkH36Vbyai7M= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 h1:1mnRASEKnkqsntcxHaysxwgVoUUp5dkiB+l3llKnqyg= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.23 h1:DWYZIsyqagnWL00f8M/SOr9fN063OEQWn9LLTbdYXsk= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11 h1:y2+VQzC6Zh2ojtV2LoC0MNwHWc6qXv/j2vrQtlftkdA= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.26 h1:CeuSeq/8FnYpPtnuIeLQEEvDv9zUjneuYi8EghMBdwQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 h1:5LHn8JQ0qvjD9L9JhMtylnkcw7j05GDZqM9Oin6hpr0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.14.0 h1:e2ooMhpYGhDnBfSvIyusvAwX7KexuZaHbQY2Dyei7VU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.31.0 h1:B1G2pSPvbAtQjilPq+Y7jLIzCOwKzuVEl+aBBaNG0AQ= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a h1:eqjiAL3qooftPm8b9C1GsSSRcmlw7iOva8vdBTmV2PY= +github.com/axiomhq/hyperloglog v0.0.0-20220105174342-98591331716a/go.mod h1:2stgcRjl6QmW+gU2h5E7BQXg4HU0gzxKWDuT5HviN9s= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= +github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/centrify/cloud-golang-sdk v0.0.0-20210923165758-a8c48d049166 h1:jQ93fKqb/wRmK/KiHpa7Tk9rmHeKXhp4j+5Sg/tENiY= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0 h1:CWU8piLyqoi9qXEUwzOh5KFKGgmSU5ZhktJyYcq6ryQ= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudfoundry-community/go-cfclient v0.0.0-20210823134051-721f0e559306 h1:k8q2Nsz7kNaUlysVCnWIFLMUSqiKXaGLdIf9P0GsX2Y= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= +github.com/coreos/go-oidc/v3 v3.5.0 h1:VxKtbccHZxs8juq7RdJntSqtXFtde9YpNpGn0yqgEHw= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/couchbase/gocb/v2 v2.6.3 h1:5RsMo+RRfK0mVxHLAfpBz3/tHlgXZb1WBNItLk9Ab+c= +github.com/couchbase/gocbcore/v10 v10.2.3 h1:PEkRSNSkKjUBXx82Ucr094+anoiCG5GleOOQZOHo6D4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.12.2 h1:1OcPn5GBIobjWNd+8yjfHNIaFX14B1pWI3F9HZy5KXw= +github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba h1:p6poVbjHDkKa+wtC8frBMwQtT3BmqGYBjzMwJ63tuR4= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc h1:8WFBn63wegobsYAX0YjD+8suexZDga5CctH4CCTx2+8= +github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc/go.mod h1:c9O8+fpSOX1DM8cPNSkX/qsBWdkD4yd2dpciOWQjpBw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/digitalocean/godo v1.7.5 h1:JOQbAO6QT1GGjor0doT0mXefX2FgUDPOpYh2RaXA+ko= +github.com/digitalocean/godo v1.7.5/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/cli v20.10.20+incompatible h1:lWQbHSHUFs7KraSN2jOJK7zbMS2jNCHI4mt4xUFUVQ4= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/docker v23.0.4+incompatible h1:Kd3Bh9V/rO+XpTP/BLqM+gx8z7+Yb0AA2Ibj+nNo4ek= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74 h1:2MIhn2R6oXQbgW5yHfS+d6YqyMfXiu2L55rFZC4UD/M= +github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74/go.mod h1:UqXY1lYT/ERa4OEAywUqdok1T4RCRdArkhic1Opuavo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ= +github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= +github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0= +github.com/gammazero/workerpool v1.1.3 h1:WixN4xzukFoN0XSeXF6puqEqFTl2mECI9S6W44HWy9Q= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-ldap/ldap/v3 v3.4.4 h1:qPjipEpt+qDa6SI/h1fzuGWoRUY+qqQ9sOZq67/PYUs= +github.com/go-ldap/ldif v0.0.0-20200320164324-fd88d9b715b3 h1:sfz1YppV05y4sYaW7kXZtrocU/+vimnIWt4cxAYh7+o= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= +github.com/go-openapi/analysis v0.19.16/go.mod h1:GLInF007N83Ad3m8a/CbQ5TPzdnGT7workfHwuVjNVk= +github.com/go-openapi/analysis v0.20.0 h1:UN09o0kNhleunxW7LR+KnltD0YrJ8FF03pSqvAN3Vro= +github.com/go-openapi/analysis v0.20.0/go.mod h1:BMchjvaHDykmRMsK40iPtvyOfFdMMxlOmQr9FBZk+Og= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.1 h1:j23mMDtRxMwIobkpId7sWh7Ddcx4ivaoqUbfXx5P+a8= +github.com/go-openapi/errors v0.20.1/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= +github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY= +github.com/go-openapi/loads v0.19.6/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= +github.com/go-openapi/loads v0.19.7/go.mod h1:brCsvE6j8mnbmGBh103PT/QLHfbyDxA4hsKvYBNEGVc= +github.com/go-openapi/loads v0.20.0/go.mod h1:2LhKquiE513rN5xC6Aan6lYOSddlL8Mp20AW9kpviM4= +github.com/go-openapi/loads v0.20.2 h1:z5p5Xf5wujMxS1y8aP+vxwW5qYT2zdJBbXKmQUG3lcc= +github.com/go-openapi/loads v0.20.2/go.mod h1:hTVUotJ+UonAMMZsvakEgmWKgtulweO9vYP2bQYKA/o= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= +github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= +github.com/go-openapi/runtime v0.19.24 h1:TqagMVlRAOTwllE/7hNKx6rQ10O6T8ZzeJdMjSTKaD4= +github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.19.8/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= +github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= +github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ= +github.com/go-openapi/spec v0.20.3 h1:uH9RQ6vdyPSs2pSy9fL8QPspDF2AMIMPtmK5coSSjtQ= +github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/strfmt v0.19.11/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= +github.com/go-openapi/strfmt v0.20.0 h1:l2omNtmNbMc39IGptl9BuXBEKcZfS8zjrTsPKTiJiDM= +github.com/go-openapi/strfmt v0.20.0/go.mod h1:UukAYgTaQfqJuAFlNxxMWNvMYiwiXtLsF2VwmoFtbtc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.12/go.mod h1:eFdyEBkTdoAf/9RXBvj4cr1nH7GD8Kzo5HTt47gr72M= +github.com/go-openapi/swag v0.19.13/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= +github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= +github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= +github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI= +github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= +github.com/go-openapi/validate v0.20.2 h1:AhqDegYV3J3iQkMPJSXkvzymHKMTw0BST3RK3hTT4ts= +github.com/go-openapi/validate v0.20.2/go.mod h1:e7OJoKNgd0twXZwIn0A43tHbvIcr/rZIVCbJBpTUoY0= +github.com/go-ozzo/ozzo-validation v3.6.0+incompatible h1:msy24VGS42fKO9K1vLz82/GeYW1cILu7Nuuj1N3BBkE= +github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gocql/gocql v1.0.0 h1:UnbTERpP72VZ/viKE1Q1gPtmLvyTZTvuAstvSRydw/c= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-metrics-stackdriver v0.2.0 h1:rbs2sxHAPn2OtUj9JdR/Gij1YKGl0BTVD0augB+HEjE= +github.com/google/go-metrics-stackdriver v0.2.0/go.mod h1:KLcPyp3dWJAFD+yHisGlJSZktIsTjb50eB72U2YZ9K0= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/tink/go v1.7.0 h1:6Eox8zONGebBFcCBqkVmt60LaWZa6xg1cl/DwAh/J1w= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.9.1 h1:DpTpJqzZ3NvX9zqjhIuI1oVzYZMvboZe+3LoeEIJjHM= +github.com/googleapis/gax-go/v2 v2.9.1/go.mod h1:4FG3gMrVZlyMp5itSYKMU9z/lBE7+SbnUOvzH2HqbEY= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hashicorp/cap v0.3.0 h1:zFzVxuWy78lO6QRLHu/ONkjx/Jh0lpfvPgmpDGri43E= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/cronexpr v1.1.1 h1:NJZDd87hGXjoZBdvyCF9mX4DCq5Wy7+A/w+A7q0wn6c= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/eventlogger v0.2.1 h1:sjAOKO62BDDBn10516Uo7QDf5KEqzhU0LkUnbBptVUU= +github.com/hashicorp/eventlogger v0.2.1/go.mod h1://CHt6/j+Q2lc0NlUB5af4aS2M0c0aVBg9/JfcpAyhM= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192 h1:eje2KOX8Sf7aYPiAsLnpWdAIrGRMcpFjN/Go/Exb7Zo= +github.com/hashicorp/go-discover v0.0.0-20210818145131-c573d69da192/go.mod h1:3/4dzY4lR1Hzt9bBqMhBzG7lngZ0GKx/nL6G/ad62wE= +github.com/hashicorp/go-gcp-common v0.8.0 h1:/2vGAbCU1v+BZ3YHXTCzTvxqma9WOJHYtADTfhZixLo= +github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0 h1:pSjQfW3vPtrOTcasTUKgCTQT7OGPPTTMVRrOfU6FJD8= +github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8DSFG2IwDcydK9DBQE+fGA5fsw6hSk= +github.com/hashicorp/go-kms-wrapping/v2 v2.0.9 h1:JpCvi97NMA+saNqO8ovQcGoRbBq6P5ZZlJqvOsW5ick= +github.com/hashicorp/go-kms-wrapping/v2 v2.0.9/go.mod h1:NtMaPhqSlfQ72XWDD2g80o8HI8RKkowIB8/WZHMyPY4= +github.com/hashicorp/go-kms-wrapping/wrappers/aead/v2 v2.0.7-1 h1:ZV26VJYcITBom0QqYSUOIj4HOHCVPEFjLqjxyXV/AbA= +github.com/hashicorp/go-kms-wrapping/wrappers/aead/v2 v2.0.7-1/go.mod h1:b99cDSA+OzcyRoBZroSf174/ss/e6gUuS45wue9ZQfc= +github.com/hashicorp/go-kms-wrapping/wrappers/alicloudkms/v2 v2.0.1 h1:ydUCtmr8f9F+mHZ1iCsvzqFTXqNVpewX3s9zcYipMKI= +github.com/hashicorp/go-kms-wrapping/wrappers/alicloudkms/v2 v2.0.1/go.mod h1:Sl/ffzV57UAyjtSg1h5Km0rN5+dtzZJm1CUztkoCW2c= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.7 h1:E3eEWpkofgPNrYyYznfS1+drq4/jFcqHQVNcL7WhUCo= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.7/go.mod h1:j5vefRoguQUG7iM4reS/hKIZssU1lZRqNPM5Wow6UnM= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.7 h1:X27JWuPW6Gmi2l7NMm0pvnp7z7hhtns2TeIOQU93mqI= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.7/go.mod h1:i7Dt9mDsVUQG/I639jtdQerliaO2SvvPnpYPhZ8CGZ4= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.8 h1:16I8OqBEuxZIowwn3jiLvhlx+z+ia4dJc9stvz0yUBU= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.8/go.mod h1:6QUMo5BrXAtbzSuZilqmx0A4px2u6PeFK7vfp2WIzeM= +github.com/hashicorp/go-kms-wrapping/wrappers/ocikms/v2 v2.0.7 h1:KeG3QGrbxbr2qAqCJdf3NR4ijAYwdcWLTmwSbR0yusM= +github.com/hashicorp/go-kms-wrapping/wrappers/ocikms/v2 v2.0.7/go.mod h1:rXxYzjjGw4HltEwxPp9zYSRIo6R+rBf1MSPk01bvodc= +github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.7 h1:G25tZFw/LrAzJWxvS0/BFI7V1xAP/UsAIsgBwiE0mwo= +github.com/hashicorp/go-kms-wrapping/wrappers/transit/v2 v2.0.7/go.mod h1:hxNA5oTfAvwPacWVg1axtF/lvTafwlAa6a6K4uzWHhw= +github.com/hashicorp/go-memdb v1.3.3 h1:oGfEWrFuxtIUF3W2q/Jzt6G85TrMk9ey6XfYLvVe1Wo= +github.com/hashicorp/go-memdb v1.3.3/go.mod h1:uBTr1oQbtuMgd1SSGoR8YV27eT3sBHbYiNm53bMpgSg= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v1.1.5 h1:9byZdVjKTe5mce63pRVNP1L7UAmdHOTEMGehn6KvJWs= +github.com/hashicorp/go-msgpack v1.1.5/go.mod h1:gWVc3sv/wbDmR3rQsj1CAktEZzoz1YNK9NfGLXJ69/4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-plugin v1.4.9 h1:ESiK220/qE0aGxWdzKIvRH69iLiuN/PjoLTm69RoWtU= +github.com/hashicorp/go-plugin v1.4.9/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a h1:FmnBDwGwlTgugDGbVxwV8UavqSMACbGrUpfc98yFLR4= +github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-secure-stdlib/awsutil v0.2.3 h1:AAQ6Vmo/ncfrZYtbpjhO+g0Qt+iNpYtl3UWT1NLmbYY= +github.com/hashicorp/go-secure-stdlib/awsutil v0.2.3/go.mod h1:oKHSQs4ivIfZ3fbXGQOop1XuDfdSb8RIsWTGaAanSfg= +github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= +github.com/hashicorp/go-secure-stdlib/base62 v0.1.2 h1:ET4pqyjiGmY09R5y+rSd70J2w45CtbWDNvGqWp/R3Ng= +github.com/hashicorp/go-secure-stdlib/base62 v0.1.2/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= +github.com/hashicorp/go-secure-stdlib/fileutil v0.1.0 h1:f2mwVgMJjXuX/+eWD6ZW30+oIRgCofL+XMWknFkB1WM= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.3 h1:kH3Rhiht36xhAfhuHyWJDgdXXEx9IIZhDGRk24CDhzg= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.3/go.mod h1:ov1Q0oEDjC3+A4BwsG2YdKltrmEw8sf9Pau4V9JQ4Vo= +github.com/hashicorp/go-secure-stdlib/nonceutil v0.1.0 h1:iJG9Q3iUme12yH+wzBMGYrw/Am4CfX3sDcA8m5OGfhQ= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/password v0.1.1 h1:6JzmBqXprakgFEHwBgdchsjaA9x3GyjdI568bXKxa60= +github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1 h1:SMGUnbpAcat8rIKHkBPjfv81yC46a8eCNZ2hsR2l1EI= +github.com/hashicorp/go-secure-stdlib/reloadutil v0.1.1/go.mod h1:Ch/bf00Qnx77MZd49JRgHYqHQjtEmTgGU2faufpVZb0= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.2 h1:phcbL8urUzF/kxA/Oj6awENaRwfWsjP59GW7u2qlDyY= +github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.2/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= +github.com/hashicorp/go-slug v0.11.1 h1:c6lLdQnlhUWbS5I7hw8SvfymoFuy6EmiFDedy6ir994= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-tfe v1.25.1 h1:OxjDhY8Rj36n/uTSmhdFRLcnhXFfRTsopiovYSkJjak= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= +github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= +github.com/hashicorp/hcp-sdk-go v0.23.0 h1:3WarkQSK0VzxJaH6psHIGQagag3ujL+NjWagZZHpiZM= +github.com/hashicorp/hcp-sdk-go v0.23.0/go.mod h1:/9UoDY2FYYA8lFaKBb2HmM/jKYZGANmf65q9QRc/cVw= +github.com/hashicorp/jsonapi v0.0.0-20210826224640-ee7dae0fb22d h1:9ARUJJ1VVynB176G1HCwleORqCaXm/Vx0uUi0dL26I0= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/nomad/api v0.0.0-20230519153805-2275a83cbfdf h1:cKXVf1UJqwdkGiTF3idqCOLApAql0310OSmJxeiaMWg= +github.com/hashicorp/raft v1.0.1/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= +github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= +github.com/hashicorp/raft v1.1.2-0.20191002163536-9c6bd3e3eb17/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft v1.2.0/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft v1.3.10 h1:LR5QZX1VQd0DFWZfeCwWawyeKfpS/Tm1yjnJIY5X4Tw= +github.com/hashicorp/raft v1.3.10/go.mod h1:J8naEwc6XaaCfts7+28whSeRvCqTd6e20BlCU3LtEO4= +github.com/hashicorp/raft-autopilot v0.2.0 h1:2/R2RPgamgRKgNWGQioULZvjeKXQZmDuw5Ty+6c+H7Y= +github.com/hashicorp/raft-autopilot v0.2.0/go.mod h1:q6tZ8UAZ5xio2gv2JvjgmtOlh80M6ic8xQYBe2Egkg8= +github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c h1:oiKun9QlrOz5yQxMZJ3tf1kWtFYuKSJzxzEDxDPevj4= +github.com/hashicorp/raft-boltdb/v2 v2.0.0-20210421194847-a7e34179d62c/go.mod h1:kiPs9g148eLShc2TYagUAyKDnD+dH9U+CQKsXzlY9xo= +github.com/hashicorp/raft-snapshot v1.0.4 h1:EuDuayAJPdiDmVk1ygTDnG2zDzrs0/6/yBuma1IYSow= +github.com/hashicorp/raft-snapshot v1.0.4/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHksSSszImWSOTC8Ic= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/vault v1.14.1 h1:JBRe4N6g6iu3yWenhlMn9PwSNAQYIQQ6PTYnbccvyxM= +github.com/hashicorp/vault v1.14.1/go.mod h1:VH1j4CD8lYPQ+XjmgpAF7gt0M2swsARFHndbDyDRgkU= +github.com/hashicorp/vault-plugin-auth-alicloud v0.15.0 h1:R2SVwOeVLG5DXzUx42UWhjfFqS0Z9+ncfebPu+gO9VA= +github.com/hashicorp/vault-plugin-auth-azure v0.15.1 h1:CknW0l2O70326KfepWeDuPszuNherhAtVNaSLRBsS4U= +github.com/hashicorp/vault-plugin-auth-centrify v0.15.1 h1:6StAr5tltpySNgyUwWC8czm9ZqkO7NIZfcRmxxtFwQ8= +github.com/hashicorp/vault-plugin-auth-cf v0.15.0 h1:zIVGlYXCRBY/ElucWdFC9xF27d2QMGMQPm9wSezGREI= +github.com/hashicorp/vault-plugin-auth-gcp v0.16.0 h1:DA/ZDLCrUsbHS/7Xqkkw7l2SgbQE9rWEHLLWYTGu8rw= +github.com/hashicorp/vault-plugin-auth-jwt v0.16.0 h1:BUk03WDSGZuB+kEq3HTOQ7ecEH2Z1Idit42jfB5EnpE= +github.com/hashicorp/vault-plugin-auth-kerberos v0.10.0 h1:YH2x9kIV0jKXk22tVkpydhmPeEgprC7IOfN8l0pjF6c= +github.com/hashicorp/vault-plugin-auth-kubernetes v0.16.0 h1:vuXNJvtMyoqQ01Sfwf2TNcJNkGcxP1vD3C7gpvuVkCU= +github.com/hashicorp/vault-plugin-auth-oci v0.14.0 h1:B7uyigqgUAO3gebvi8mMmsq7l4QAG0bLEP6rAKyDVuw= +github.com/hashicorp/vault-plugin-database-couchbase v0.9.2 h1:UWPWUADWUE08a3qeZixd/diIcNIm0NTqdPNTNbUljuQ= +github.com/hashicorp/vault-plugin-database-elasticsearch v0.13.2 h1:N81xJfdVjAo49dUu5Wo95C0fv5scpbYL9z4ykWeHxJg= +github.com/hashicorp/vault-plugin-database-mongodbatlas v0.10.0 h1:fgsiuSq3AeFcYnbPkXOLSkKDrS2blaS/6MAmHEIAH28= +github.com/hashicorp/vault-plugin-database-redis v0.2.1 h1:E+UeZcpNtQO8nMfVebwE5ZS2sJpNjzbKwYJX1y8FFNk= +github.com/hashicorp/vault-plugin-database-redis-elasticache v0.2.1 h1:D8mdwkB6CyC37wkpdW9mgJNNrqral956bFoVj3AoQoE= +github.com/hashicorp/vault-plugin-database-snowflake v0.8.0 h1:Ec7gxxWIhxTmbKNXpmPgREra2go4H7QgDByIvtUwfFw= +github.com/hashicorp/vault-plugin-mock v0.16.1 h1:5QQvSUHxDjEEbrd2REOeacqyJnCLPD51IQzy71hx8P0= +github.com/hashicorp/vault-plugin-secrets-ad v0.16.0 h1:6RCpd2PbBvmi5xmxXhggE0Xv+/Gag896/NNZeMKH+8A= +github.com/hashicorp/vault-plugin-secrets-alicloud v0.15.0 h1:uVpcx2s3PwYXSOHmjA/Ai6+V0c3wgvSApELZez8b9mI= +github.com/hashicorp/vault-plugin-secrets-azure v0.16.1 h1:eMU5qYPa5dQQALPP7B+UPB0QCSHzB6LKrqbNCcRr7Ts= +github.com/hashicorp/vault-plugin-secrets-gcp v0.16.0 h1:5ozLtt38Bw/DLt37dbccT8j56A+2T7CWFfYecKleGl4= +github.com/hashicorp/vault-plugin-secrets-gcpkms v0.15.0 h1:CueteKXEuO52qGu1nUaDc/euSTSfQD9MONkXuvWdZQw= +github.com/hashicorp/vault-plugin-secrets-kubernetes v0.5.0 h1:g0W1ybHjO945jDtuDEFcqTINyW/s06wxZarE/7aLumc= +github.com/hashicorp/vault-plugin-secrets-kv v0.15.0 h1:S2d1t4m4ilDNJRdMUzNUimvyu/+ll8huq5QncVgYz+s= +github.com/hashicorp/vault-plugin-secrets-mongodbatlas v0.10.0 h1:FB860wKclwLBvBHkQb5nq8bGMUAsuw0khrYT1RM0NR0= +github.com/hashicorp/vault-plugin-secrets-openldap v0.11.0 h1:8J8u7uWLifj3uF5tot9Qj74H8vEwPMNKN+XTLLgSmDw= +github.com/hashicorp/vault-plugin-secrets-terraform v0.7.1 h1:Icb3EDpNvb4ltnGff2Zrm3JVNDDdbbL2wdA2LouD2KQ= +github.com/hashicorp/vault/api v1.9.2 h1:YjkZLJ7K3inKgMZ0wzCU9OHqc+UqMQyXsPXnf3Cl2as= +github.com/hashicorp/vault/api v1.9.2/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8= +github.com/hashicorp/vault/sdk v0.9.2-0.20230704151349-7522ca248f90 h1:LzAteOPPdMRsHaqOtf+XmLKr1M0ObXdK4JcxjLE11wM= +github.com/hashicorp/vault/sdk v0.9.2-0.20230704151349-7522ca248f90/go.mod h1:gG0lA7P++KefplzvcD3vrfCmgxVAM7Z/SqX5NeOL/98= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= +github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb v1.7.6/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgconn v1.14.0 h1:vrbA9Ud87g6JdFWkHTJXppVce58qPIdP7N8y0Ml/A7Q= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgproto3/v2 v2.3.2 h1:7eY55bdBeCz1F2fTzSz69QC+pG46jYq9/jtSPiJ5nn0= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgtype v1.14.0 h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw= +github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jackc/pgx/v4 v4.18.1 h1:YP7G1KABtKpB5IHrO9vYwSrCOhs7p3uqhvhhQBptya0= +github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= +github.com/jarcoal/httpmock v1.0.7 h1:d1a2VFpSdm5gtjhCPWsQHSnx8+5V3ms5431YwvmkuNk= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jeffchao/backoff v0.0.0-20140404060208-9d7fd7aa17f2 h1:mex1izRBCD+7WjieGgRdy7e651vD/lvB1bD9vNE/3K4= +github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f h1:E87tDTVS5W65euzixn7clSzK66puSt1H4I5SC0EmHH4= +github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2qVK16Lq8V+wfiL2lPeDZ7UWMxk5LemerHa1p6N00= +github.com/jefferai/jsonx v1.0.0 h1:Xoz0ZbmkpBvED5W9W1B5B/zc3Oiq7oXqiW7iRV3B6EI= +github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= +github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f h1:ENpDacvnr8faw5ugQmEF1QYk+f/Y9lXFvuYmRxykago= +github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f/go.mod h1:KDSfL7qe5ZfQqvlDMkVjCztbmcpp/c8M77vhQP8ZPvk= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE= +github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mediocregopher/radix/v4 v4.1.2 h1:Pj7XnNK5WuzzFy63g98pnccainAePK+aZNQRvxSvj2I= +github.com/michaelklishin/rabbit-hole/v2 v2.12.0 h1:946p6jOYFcVJdtBBX8MwXvuBkpPjwm1Nm2Qg8oX+uFk= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a h1:eU8j/ClY2Ty3qdHnn0TyW3ivFoPC/0F1gQZz8yTxbbE= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.2 h1:PvH+lL2B7IQ101xQL63Of8yFS2y+aDlsFcsqNc+u/Kw= +github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/patternmatcher v0.5.0 h1:YCZgJOeULcxLw1Q+sVR636pmS7sPEn1Qo2iAN6M7DBo= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mongodb-forks/digest v1.0.4 h1:9FrGTc7MGAchgaQBcXBnEwUM/Oo8obW7OGWxnsSvZ64= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 h1:BQ1HW7hr4IVovMwWg0E0PYcyW8CzqDcVmaew9cujU4s= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/okta/okta-sdk-golang/v2 v2.12.1 h1:U+smE7trkHSZO8Mval3Ow85dbxawO+pMAr692VZq9gM= +github.com/okta/okta-sdk-golang/v2 v2.12.1/go.mod h1:KRoAArk1H216oiRnQT77UN6JAhBOnOWkK27yA1SM7FQ= +github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo/v2 v2.9.1 h1:zie5Ly042PD3bsCvsSOPvRnFwyo3rKe64TJlD6nu0mk= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= +github.com/opencontainers/runc v1.1.6 h1:XbhB8IfG/EsnhNvZtNdLB0GBw92GYEFvKlhaJk9jUgA= +github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A= +github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU= +github.com/oracle/oci-go-sdk v24.3.0+incompatible h1:x4mcfb4agelf1O4/1/auGlZ1lr97jXRSSN5MxTgG/zU= +github.com/oracle/oci-go-sdk/v60 v60.0.0 h1:EJAWjEi4SY5Raha6iUzq4LTQ0uM5YFw/wat/L1ehIEM= +github.com/oracle/oci-go-sdk/v60 v60.0.0/go.mod h1:krz+2gkSzlSL/L4PvP0Z9pZpag9HYLNtsMd1PmxlA2w= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c h1:vwpFWvAO8DeIZfFeqASzZfsxuWPno9ncAebBEP0N3uE= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= +github.com/pires/go-proxyproto v0.6.1 h1:EBupykFmo22SDjv4fQVQd2J9NOoLPmyZA/15ldOGkPw= +github.com/pires/go-proxyproto v0.6.1/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc= +github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d h1:PinQItctnaL2LtkaSM678+ZLLy5TajwOeXzWvYC7tII= +github.com/pquerna/otp v1.2.1-0.20191009055518-468c2dd2b58d/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rboyer/safeio v0.2.1 h1:05xhhdRNAdS3apYm7JRjOqngf4xruaW959jmRxGDuSU= +github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig= +github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 h1:Wdi9nwnhFNAlseAOekn6B5G/+GMtks9UKbvRU/CMM/o= +github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= +github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/conswriter v0.0.0-20180208195008-f5ae3917a627/go.mod h1:7zjs06qF79/FKAJpBvFx3P8Ww4UTIMAe+lpNXDHziac= +github.com/sean-/pager v0.0.0-20180208200047-666be9bf53b5/go.mod h1:BeybITEsBEg6qbIiqJ6/Bqeq25bCLbL7YFmpaFfJDuM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sethvargo/go-limiter v0.7.1 h1:wWNhTj0pxjyJ7wuJHpRJpYwJn+bUnjYfw2a85eu5w9U= +github.com/sethvargo/go-limiter v0.7.1/go.mod h1:C0kbSFbiriE5k2FFOe18M1YZbAR2Fiwf72uGu0CXCcU= +github.com/shirou/gopsutil/v3 v3.22.6 h1:FnHOFOh+cYAM0C30P+zysPISzlknLC5Z1G4EAElznfQ= +github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/snowflakedb/gosnowflake v1.6.18 h1:mm4KYvp3LWGHIuACwX/tHv9qDs2NdLDXuK0Rep+vfJc= +github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d h1:bVQRCxQvfjNUeRqaY/uT0tFuvuFY0ulgnczuR684Xic= +github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b h1:br+bPNZsJWKicw/5rALEo67QHs5weyD5tf8WST+4sJ0= +github.com/sony/gobreaker v0.4.2-0.20210216022020-dd874f9dd33b/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tencentcloud/tencentcloud-sdk-go v1.0.162 h1:8fDzz4GuVg4skjY2B0nMN7h6uN61EDVkuLyI2+qGHhI= +github.com/tencentcloud/tencentcloud-sdk-go v1.0.162/go.mod h1:asUz5BPXxgoPGaRgZaVm1iGcUAuHyYUo1nXqKa83cvI= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs= +github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo= +github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.mongodb.org/atlas v0.28.0 h1:CelAXtmiM36tdifSDwWdDH1nNbdvq0M2XfUR8208JxA= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= +go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= +go.mongodb.org/mongo-driver v1.4.6/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= +go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o= +go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190424220101-1e8e1cfdf96b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.124.0 h1:dP6Ef1VgOGqQ8eiv4GiY8RhmeyqzovcXBYPDUYG8Syo= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6 h1:62QuyPXKEkZpjZesyj5K5jABl6MnSnWl+vNuT5oz90E= +google.golang.org/genproto v0.0.0-20230525154841-bd750badd5c6/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= +gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= +k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo= +k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= +k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= +k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE= +k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk= +k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +layeh.com/radius v0.0.0-20190322222518-890bc1058917 h1:BDXFaFzUt5EIqe/4wrTc4AcYZWP6iC6Ult+jQWLh5eU= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/main.go b/main.go new file mode 100644 index 0000000..4101d4d --- /dev/null +++ b/main.go @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package main + +import ( + "os" + + hclog "github.com/hashicorp/go-hclog" + "github.com/hashicorp/vault/api" + "github.com/hashicorp/vault/sdk/plugin" + + "github.com/matter-labs/vault-auth-tee/tee" +) + +func main() { + apiClientMeta := &api.PluginAPIClientMeta{} + flags := apiClientMeta.FlagSet() + flags.Parse(os.Args[1:]) + + tlsConfig := apiClientMeta.GetTLSConfig() + tlsProviderFunc := api.VaultPluginTLSProvider(tlsConfig) + + if err := plugin.ServeMultiplex(&plugin.ServeOpts{ + BackendFactoryFunc: tee.Factory, + // set the TLSProviderFunc so that the plugin maintains backwards + // compatibility with Vault versions that don’t support plugin AutoMTLS + TLSProviderFunc: tlsProviderFunc, + }); err != nil { + logger := hclog.New(&hclog.LoggerOptions{}) + + logger.Error("plugin shutting down", "error", err) + os.Exit(1) + } +} diff --git a/ratee/sgxquote.go b/ratee/sgxquote.go new file mode 100644 index 0000000..7bc6d7b --- /dev/null +++ b/ratee/sgxquote.go @@ -0,0 +1,530 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Matter Labs + +package ratee + +// #cgo LDFLAGS: -lsgx_dcap_quoteverify -ldl +/* +#include // for malloc/free +#include +#include + +sgx_ql_qv_supplemental_t *allocSupp() { return (sgx_ql_qv_supplemental_t*) malloc(sizeof(sgx_ql_qv_supplemental_t)); } +void freeSupp(sgx_ql_qv_supplemental_t * * p) { free(p); } +*/ +import "C" + +import ( + "bytes" + "encoding/binary" + "errors" + "os" + "unsafe" +) + +type TeeQvCollateral struct { + MajorVersion uint16 `json:"major_version"` + MinorVersion uint16 `json:"minor_version"` + TeeType uint32 `json:"tee_type"` + PckCrlIssuerChain []byte `json:"pck_crl_issuer_chain"` + RootCaCrl []byte `json:"root_ca_crl"` + PckCrl []byte `json:"pck_crl"` + TcbInfoIssuerChain []byte `json:"tcb_info_issuer_chain"` + TcbInfo []byte `json:"tcb_info"` + QeIdentityIssuerChain []byte `json:"qe_identity_issuer_chain"` + QeIdentity []byte `json:"qe_identity"` +} + +type Quote struct { + Version [2]byte `json:"version"` + KeyType [2]byte `json:"key_type"` + Reserved [4]byte `json:"reserved"` + QeSvn [2]byte `json:"qe_svn"` + PceSvn [2]byte `json:"pce_svn"` + QeVendorId [16]byte `json:"qe_vendor_id"` + UserData [20]byte `json:"user_data"` + ReportBody struct { + Cpusvn [16]byte `json:"cpusvn"` + Miscselect [4]byte `json:"miscselect"` + Reserved1 [28]byte `json:"reserved1"` + Features [8]byte `json:"features"` + Xfrm [8]byte `json:"xfrm"` + MrEnclave [32]byte `json:"mrenclave"` + Reserved2 [32]byte `json:"reserved2"` + MrSigner [32]byte `json:"mrsigner"` + Reserved3 [96]byte `json:"reserved3"` + IsvProdid [2]byte `json:"isv_prodid"` + IsvSvn [2]byte `json:"isv_svn"` + Reserved4 [60]byte `json:"reserved4"` + ReportData [64]byte `json:"reportdata"` + } `json:"report_body"` +} + +type QuoteVerificationResult struct { + VerificationResult SgxQlQvResult + CollateralExpired bool + EarliestExpirationDate int64 + Advisory string + Quote Quote +} + +// convertCollateral converts TeeQvCollateral to sgx_ql_qve_collateral_t +func convertQveCollateral(coll C.sgx_ql_qve_collateral_t) TeeQvCollateral { + var data = TeeQvCollateral{ + TeeType: uint32(coll.tee_type), + PckCrlIssuerChain: C.GoBytes(unsafe.Pointer(coll.pck_crl_issuer_chain), C.int(coll.pck_crl_issuer_chain_size)), + RootCaCrl: C.GoBytes(unsafe.Pointer(coll.root_ca_crl), C.int(coll.root_ca_crl_size)), + PckCrl: C.GoBytes(unsafe.Pointer(coll.pck_crl), C.int(coll.pck_crl_size)), + TcbInfoIssuerChain: C.GoBytes(unsafe.Pointer(coll.tcb_info_issuer_chain), C.int(coll.tcb_info_issuer_chain_size)), + TcbInfo: C.GoBytes(unsafe.Pointer(coll.tcb_info), C.int(coll.tcb_info_size)), + QeIdentityIssuerChain: C.GoBytes(unsafe.Pointer(coll.qe_identity_issuer_chain), C.int(coll.qe_identity_issuer_chain_size)), + QeIdentity: C.GoBytes(unsafe.Pointer(coll.qe_identity), C.int(coll.qe_identity_size)), + } + + // Hack needed due to unnamed union and struct at the beginning + var pver = (*[2]uint16)(unsafe.Pointer(&coll)) + data.MajorVersion = pver[0] + data.MinorVersion = pver[1] + + return data +} + +// convertCollateral converts TeeQvCollateral to sgx_ql_qve_collateral_t +func convertCollateral(coll TeeQvCollateral) C.sgx_ql_qve_collateral_t { + var data = C.sgx_ql_qve_collateral_t{ + tee_type: C.uint32_t(coll.TeeType), + pck_crl_issuer_chain: (*C.char)(C.CBytes(coll.PckCrlIssuerChain)), + pck_crl_issuer_chain_size: C.uint32_t(len(coll.PckCrlIssuerChain)), + root_ca_crl: (*C.char)(C.CBytes(coll.RootCaCrl)), + root_ca_crl_size: C.uint32_t(len(coll.RootCaCrl)), + pck_crl: (*C.char)(C.CBytes(coll.PckCrl)), + pck_crl_size: C.uint32_t(len(coll.PckCrl)), + tcb_info_issuer_chain: (*C.char)(C.CBytes(coll.TcbInfoIssuerChain)), + tcb_info_issuer_chain_size: C.uint32_t(len(coll.TcbInfoIssuerChain)), + tcb_info: (*C.char)(C.CBytes(coll.TcbInfo)), + tcb_info_size: C.uint32_t(len(coll.TcbInfo)), + qe_identity_issuer_chain: (*C.char)(C.CBytes(coll.QeIdentityIssuerChain)), + qe_identity_issuer_chain_size: C.uint32_t(len(coll.QeIdentityIssuerChain)), + qe_identity: (*C.char)(C.CBytes(coll.QeIdentity)), + qe_identity_size: C.uint32_t(len(coll.QeIdentity)), + } + + // Hack needed due to unnamed union and struct at the beginning + var pver = (*[2]uint16)(unsafe.Pointer(&data)) + pver[0] = coll.MajorVersion + pver[1] = coll.MinorVersion + + return data +} + +type SgxQlQvResult uint32 + +const ( + SgxQlQvResultOk = SgxQlQvResult(C.SGX_QL_QV_RESULT_OK) + SgxQlQvResultConfigNeeded = SgxQlQvResult(C.SGX_QL_QV_RESULT_CONFIG_NEEDED) + SgxQlQvResultOutOfDate = SgxQlQvResult(C.SGX_QL_QV_RESULT_OUT_OF_DATE) + SgxQlQvResultOutOfDateConfigNeeded = SgxQlQvResult(C.SGX_QL_QV_RESULT_OUT_OF_DATE_CONFIG_NEEDED) + SgxQlQvResultInvalidSignature = SgxQlQvResult(C.SGX_QL_QV_RESULT_INVALID_SIGNATURE) + SgxQlQvResultRevoked = SgxQlQvResult(C.SGX_QL_QV_RESULT_REVOKED) + SgxQlQvResultUnspecified = SgxQlQvResult(C.SGX_QL_QV_RESULT_UNSPECIFIED) + SgxQlQvResultSwHardeningNeeded = SgxQlQvResult(C.SGX_QL_QV_RESULT_SW_HARDENING_NEEDED) + SgxQlQvResultConfigAndSwHardeningNeeded = SgxQlQvResult(C.SGX_QL_QV_RESULT_CONFIG_AND_SW_HARDENING_NEEDED) +) + +var ( + // ErrEmptyReport is returned by VerifyRemoteReport if reportBytes is empty. + ErrEmptyReport = errors.New("empty report") + ErrSgxQlErrorUnexpected = errors.New("SGX_QL_ERROR_UNEXPECTED") + ErrSgxQlErrorInvalidParameter = errors.New("SGX_QL_ERROR_INVALID_PARAMETER") + ErrSgxQlErrorOutOfMemory = errors.New("SGX_QL_ERROR_OUT_OF_MEMORY") + ErrSgxQlErrorEcdsaIdMismatch = errors.New("SGX_QL_ERROR_ECDSA_ID_MISMATCH") + ErrSgxQlPathnameBufferOverflowError = errors.New("SGX_QL_PATHNAME_BUFFER_OVERFLOW_ERROR") + ErrSgxQlFileAccessError = errors.New("SGX_QL_FILE_ACCESS_ERROR") + ErrSgxQlErrorStoredKey = errors.New("SGX_QL_ERROR_STORED_KEY") + ErrSgxQlErrorPubKeyIdMismatch = errors.New("SGX_QL_ERROR_PUB_KEY_ID_MISMATCH") + ErrSgxQlErrorInvalidPceSigScheme = errors.New("SGX_QL_ERROR_INVALID_PCE_SIG_SCHEME") + ErrSgxQlAttKeyBlobError = errors.New("SGX_QL_ATT_KEY_BLOB_ERROR") + ErrSgxQlUnsupportedAttKeyId = errors.New("SGX_QL_UNSUPPORTED_ATT_KEY_ID") + ErrSgxQlUnsupportedLoadingPolicy = errors.New("SGX_QL_UNSUPPORTED_LOADING_POLICY") + ErrSgxQlInterfaceUnavailable = errors.New("SGX_QL_INTERFACE_UNAVAILABLE") + ErrSgxQlPlatformLibUnavailable = errors.New("SGX_QL_PLATFORM_LIB_UNAVAILABLE") + ErrSgxQlAttKeyNotInitialized = errors.New("SGX_QL_ATT_KEY_NOT_INITIALIZED") + ErrSgxQlAttKeyCertDataInvalid = errors.New("SGX_QL_ATT_KEY_CERT_DATA_INVALID") + ErrSgxQlNoPlatformCertData = errors.New("SGX_QL_NO_PLATFORM_CERT_DATA") + ErrSgxQlOutOfEpc = errors.New("SGX_QL_OUT_OF_EPC") + ErrSgxQlErrorReport = errors.New("SGX_QL_ERROR_REPORT") + ErrSgxQlEnclaveLost = errors.New("SGX_QL_ENCLAVE_LOST") + ErrSgxQlInvalidReport = errors.New("SGX_QL_INVALID_REPORT") + ErrSgxQlEnclaveLoadError = errors.New("SGX_QL_ENCLAVE_LOAD_ERROR") + ErrSgxQlUnableToGenerateQeReport = errors.New("SGX_QL_UNABLE_TO_GENERATE_QE_REPORT") + ErrSgxQlKeyCertifcationError = errors.New("SGX_QL_KEY_CERTIFCATION_ERROR") + ErrSgxQlNetworkError = errors.New("SGX_QL_NETWORK_ERROR") + ErrSgxQlMessageError = errors.New("SGX_QL_MESSAGE_ERROR") + ErrSgxQlNoQuoteCollateralData = errors.New("SGX_QL_NO_QUOTE_COLLATERAL_DATA") + ErrSgxQlQuoteCertificationDataUnsupported = errors.New("SGX_QL_QUOTE_CERTIFICATION_DATA_UNSUPPORTED") + ErrSgxQlQuoteFormatUnsupported = errors.New("SGX_QL_QUOTE_FORMAT_UNSUPPORTED") + ErrSgxQlUnableToGenerateReport = errors.New("SGX_QL_UNABLE_TO_GENERATE_REPORT") + ErrSgxQlQeReportInvalidSignature = errors.New("SGX_QL_QE_REPORT_INVALID_SIGNATURE") + ErrSgxQlQeReportUnsupportedFormat = errors.New("SGX_QL_QE_REPORT_UNSUPPORTED_FORMAT") + ErrSgxQlPckCertUnsupportedFormat = errors.New("SGX_QL_PCK_CERT_UNSUPPORTED_FORMAT") + ErrSgxQlPckCertChainError = errors.New("SGX_QL_PCK_CERT_CHAIN_ERROR") + ErrSgxQlTcbinfoUnsupportedFormat = errors.New("SGX_QL_TCBINFO_UNSUPPORTED_FORMAT") + ErrSgxQlTcbinfoMismatch = errors.New("SGX_QL_TCBINFO_MISMATCH") + ErrSgxQlQeidentityUnsupportedFormat = errors.New("SGX_QL_QEIDENTITY_UNSUPPORTED_FORMAT") + ErrSgxQlQeidentityMismatch = errors.New("SGX_QL_QEIDENTITY_MISMATCH") + ErrSgxQlTcbOutOfDate = errors.New("SGX_QL_TCB_OUT_OF_DATE") + ErrSgxQlTcbOutOfDateConfigurationNeeded = errors.New("SGX_QL_TCB_OUT_OF_DATE_CONFIGURATION_NEEDED") + ErrSgxQlSgxEnclaveIdentityOutOfDate = errors.New("SGX_QL_SGX_ENCLAVE_IDENTITY_OUT_OF_DATE") + ErrSgxQlSgxEnclaveReportIsvsvnOutOfDate = errors.New("SGX_QL_SGX_ENCLAVE_REPORT_ISVSVN_OUT_OF_DATE") + ErrSgxQlQeIdentityOutOfDate = errors.New("SGX_QL_QE_IDENTITY_OUT_OF_DATE") + ErrSgxQlSgxTcbInfoExpired = errors.New("SGX_QL_SGX_TCB_INFO_EXPIRED") + ErrSgxQlSgxPckCertChainExpired = errors.New("SGX_QL_SGX_PCK_CERT_CHAIN_EXPIRED") + ErrSgxQlSgxCrlExpired = errors.New("SGX_QL_SGX_CRL_EXPIRED") + ErrSgxQlSgxSigningCertChainExpired = errors.New("SGX_QL_SGX_SIGNING_CERT_CHAIN_EXPIRED") + ErrSgxQlSgxEnclaveIdentityExpired = errors.New("SGX_QL_SGX_ENCLAVE_IDENTITY_EXPIRED") + ErrSgxQlPckRevoked = errors.New("SGX_QL_PCK_REVOKED") + ErrSgxQlTcbRevoked = errors.New("SGX_QL_TCB_REVOKED") + ErrSgxQlTcbConfigurationNeeded = errors.New("SGX_QL_TCB_CONFIGURATION_NEEDED") + ErrSgxQlUnableToGetCollateral = errors.New("SGX_QL_UNABLE_TO_GET_COLLATERAL") + ErrSgxQlErrorInvalidPrivilege = errors.New("SGX_QL_ERROR_INVALID_PRIVILEGE") + ErrSgxQlNoQveIdentityData = errors.New("SGX_QL_NO_QVE_IDENTITY_DATA") + ErrSgxQlCrlUnsupportedFormat = errors.New("SGX_QL_CRL_UNSUPPORTED_FORMAT") + ErrSgxQlQeidentityChainError = errors.New("SGX_QL_QEIDENTITY_CHAIN_ERROR") + ErrSgxQlTcbinfoChainError = errors.New("SGX_QL_TCBINFO_CHAIN_ERROR") + ErrSgxQlErrorQvlQveMismatch = errors.New("SGX_QL_ERROR_QVL_QVE_MISMATCH") + ErrSgxQlTcbSwHardeningNeeded = errors.New("SGX_QL_TCB_SW_HARDENING_NEEDED") + ErrSgxQlTcbConfigurationAndSwHardeningNeeded = errors.New("SGX_QL_TCB_CONFIGURATION_AND_SW_HARDENING_NEEDED") + ErrSgxQlUnsupportedMode = errors.New("SGX_QL_UNSUPPORTED_MODE") + ErrSgxQlNoDevice = errors.New("SGX_QL_NO_DEVICE") + ErrSgxQlServiceUnavailable = errors.New("SGX_QL_SERVICE_UNAVAILABLE") + ErrSgxQlNetworkFailure = errors.New("SGX_QL_NETWORK_FAILURE") + ErrSgxQlServiceTimeout = errors.New("SGX_QL_SERVICE_TIMEOUT") + ErrSgxQlErrorBusy = errors.New("SGX_QL_ERROR_BUSY") + ErrSgxQlUnknownMessageResponse = errors.New("SGX_QL_UNKNOWN_MESSAGE_RESPONSE") + ErrSgxQlPersistentStorageError = errors.New("SGX_QL_PERSISTENT_STORAGE_ERROR") + ErrSgxQlErrorMessageParsingError = errors.New("SGX_QL_ERROR_MESSAGE_PARSING_ERROR") + ErrSgxQlPlatformUnknown = errors.New("SGX_QL_PLATFORM_UNKNOWN") + ErrSgxQlUnknownApiVersion = errors.New("SGX_QL_UNKNOWN_API_VERSION") + ErrSgxQlCertsUnavailable = errors.New("SGX_QL_CERTS_UNAVAILABLE") + ErrSgxQlQveidentityMismatch = errors.New("SGX_QL_QVEIDENTITY_MISMATCH") + ErrSgxQlQveOutOfDate = errors.New("SGX_QL_QVE_OUT_OF_DATE") + ErrSgxQlPswNotAvailable = errors.New("SGX_QL_PSW_NOT_AVAILABLE") + ErrSgxQlCollateralVersionNotSupported = errors.New("SGX_QL_COLLATERAL_VERSION_NOT_SUPPORTED") + ErrSgxQlTdxModuleMismatch = errors.New("SGX_QL_TDX_MODULE_MISMATCH") + ErrSgxQlQeidentityNotFound = errors.New("SGX_QL_QEIDENTITY_NOT_FOUND") + ErrSgxQlTcbinfoNotFound = errors.New("SGX_QL_TCBINFO_NOT_FOUND") + ErrSgxQlInternalServerError = errors.New("SGX_QL_INTERNAL_SERVER_ERROR") + ErrSgxQlSupplementalDataVersionNotSupported = errors.New("SGX_QL_SUPPLEMENTAL_DATA_VERSION_NOT_SUPPORTED") + ErrSgxQlRootCaUntrusted = errors.New("SGX_QL_ROOT_CA_UNTRUSTED") + ErrSgxQlTcbNotSupported = errors.New("SGX_QL_TCB_NOT_SUPPORTED") +) + +// convert an SGX quote library error to a go error +func sgx2Error(err uint32) error { + switch err { + case C.SGX_QL_ERROR_UNEXPECTED: + return ErrSgxQlErrorUnexpected + case C.SGX_QL_ERROR_INVALID_PARAMETER: + return ErrSgxQlErrorInvalidParameter + case C.SGX_QL_ERROR_OUT_OF_MEMORY: + return ErrSgxQlErrorOutOfMemory + case C.SGX_QL_ERROR_ECDSA_ID_MISMATCH: + return ErrSgxQlErrorEcdsaIdMismatch + case C.SGX_QL_PATHNAME_BUFFER_OVERFLOW_ERROR: + return ErrSgxQlPathnameBufferOverflowError + case C.SGX_QL_FILE_ACCESS_ERROR: + return ErrSgxQlFileAccessError + case C.SGX_QL_ERROR_STORED_KEY: + return ErrSgxQlErrorStoredKey + case C.SGX_QL_ERROR_PUB_KEY_ID_MISMATCH: + return ErrSgxQlErrorPubKeyIdMismatch + case C.SGX_QL_ERROR_INVALID_PCE_SIG_SCHEME: + return ErrSgxQlErrorInvalidPceSigScheme + case C.SGX_QL_ATT_KEY_BLOB_ERROR: + return ErrSgxQlAttKeyBlobError + case C.SGX_QL_UNSUPPORTED_ATT_KEY_ID: + return ErrSgxQlUnsupportedAttKeyId + case C.SGX_QL_UNSUPPORTED_LOADING_POLICY: + return ErrSgxQlUnsupportedLoadingPolicy + case C.SGX_QL_INTERFACE_UNAVAILABLE: + return ErrSgxQlInterfaceUnavailable + case C.SGX_QL_PLATFORM_LIB_UNAVAILABLE: + return ErrSgxQlPlatformLibUnavailable + case C.SGX_QL_ATT_KEY_NOT_INITIALIZED: + return ErrSgxQlAttKeyNotInitialized + case C.SGX_QL_ATT_KEY_CERT_DATA_INVALID: + return ErrSgxQlAttKeyCertDataInvalid + case C.SGX_QL_NO_PLATFORM_CERT_DATA: + return ErrSgxQlNoPlatformCertData + case C.SGX_QL_OUT_OF_EPC: + return ErrSgxQlOutOfEpc + case C.SGX_QL_ERROR_REPORT: + return ErrSgxQlErrorReport + case C.SGX_QL_ENCLAVE_LOST: + return ErrSgxQlEnclaveLost + case C.SGX_QL_INVALID_REPORT: + return ErrSgxQlInvalidReport + case C.SGX_QL_ENCLAVE_LOAD_ERROR: + return ErrSgxQlEnclaveLoadError + case C.SGX_QL_UNABLE_TO_GENERATE_QE_REPORT: + return ErrSgxQlUnableToGenerateQeReport + case C.SGX_QL_KEY_CERTIFCATION_ERROR: + return ErrSgxQlKeyCertifcationError + case C.SGX_QL_NETWORK_ERROR: + return ErrSgxQlNetworkError + case C.SGX_QL_MESSAGE_ERROR: + return ErrSgxQlMessageError + case C.SGX_QL_NO_QUOTE_COLLATERAL_DATA: + return ErrSgxQlNoQuoteCollateralData + case C.SGX_QL_QUOTE_CERTIFICATION_DATA_UNSUPPORTED: + return ErrSgxQlQuoteCertificationDataUnsupported + case C.SGX_QL_QUOTE_FORMAT_UNSUPPORTED: + return ErrSgxQlQuoteFormatUnsupported + case C.SGX_QL_UNABLE_TO_GENERATE_REPORT: + return ErrSgxQlUnableToGenerateReport + case C.SGX_QL_QE_REPORT_INVALID_SIGNATURE: + return ErrSgxQlQeReportInvalidSignature + case C.SGX_QL_QE_REPORT_UNSUPPORTED_FORMAT: + return ErrSgxQlQeReportUnsupportedFormat + case C.SGX_QL_PCK_CERT_UNSUPPORTED_FORMAT: + return ErrSgxQlPckCertUnsupportedFormat + case C.SGX_QL_PCK_CERT_CHAIN_ERROR: + return ErrSgxQlPckCertChainError + case C.SGX_QL_TCBINFO_UNSUPPORTED_FORMAT: + return ErrSgxQlTcbinfoUnsupportedFormat + case C.SGX_QL_TCBINFO_MISMATCH: + return ErrSgxQlTcbinfoMismatch + case C.SGX_QL_QEIDENTITY_UNSUPPORTED_FORMAT: + return ErrSgxQlQeidentityUnsupportedFormat + case C.SGX_QL_QEIDENTITY_MISMATCH: + return ErrSgxQlQeidentityMismatch + case C.SGX_QL_TCB_OUT_OF_DATE: + return ErrSgxQlTcbOutOfDate + case C.SGX_QL_TCB_OUT_OF_DATE_CONFIGURATION_NEEDED: + return ErrSgxQlTcbOutOfDateConfigurationNeeded + case C.SGX_QL_SGX_ENCLAVE_IDENTITY_OUT_OF_DATE: + return ErrSgxQlSgxEnclaveIdentityOutOfDate + case C.SGX_QL_SGX_ENCLAVE_REPORT_ISVSVN_OUT_OF_DATE: + return ErrSgxQlSgxEnclaveReportIsvsvnOutOfDate + case C.SGX_QL_QE_IDENTITY_OUT_OF_DATE: + return ErrSgxQlQeIdentityOutOfDate + case C.SGX_QL_SGX_TCB_INFO_EXPIRED: + return ErrSgxQlSgxTcbInfoExpired + case C.SGX_QL_SGX_PCK_CERT_CHAIN_EXPIRED: + return ErrSgxQlSgxPckCertChainExpired + case C.SGX_QL_SGX_CRL_EXPIRED: + return ErrSgxQlSgxCrlExpired + case C.SGX_QL_SGX_SIGNING_CERT_CHAIN_EXPIRED: + return ErrSgxQlSgxSigningCertChainExpired + case C.SGX_QL_SGX_ENCLAVE_IDENTITY_EXPIRED: + return ErrSgxQlSgxEnclaveIdentityExpired + case C.SGX_QL_PCK_REVOKED: + return ErrSgxQlPckRevoked + case C.SGX_QL_TCB_REVOKED: + return ErrSgxQlTcbRevoked + case C.SGX_QL_TCB_CONFIGURATION_NEEDED: + return ErrSgxQlTcbConfigurationNeeded + case C.SGX_QL_UNABLE_TO_GET_COLLATERAL: + return ErrSgxQlUnableToGetCollateral + case C.SGX_QL_ERROR_INVALID_PRIVILEGE: + return ErrSgxQlErrorInvalidPrivilege + case C.SGX_QL_NO_QVE_IDENTITY_DATA: + return ErrSgxQlNoQveIdentityData + case C.SGX_QL_CRL_UNSUPPORTED_FORMAT: + return ErrSgxQlCrlUnsupportedFormat + case C.SGX_QL_QEIDENTITY_CHAIN_ERROR: + return ErrSgxQlQeidentityChainError + case C.SGX_QL_TCBINFO_CHAIN_ERROR: + return ErrSgxQlTcbinfoChainError + case C.SGX_QL_ERROR_QVL_QVE_MISMATCH: + return ErrSgxQlErrorQvlQveMismatch + case C.SGX_QL_TCB_SW_HARDENING_NEEDED: + return ErrSgxQlTcbSwHardeningNeeded + case C.SGX_QL_TCB_CONFIGURATION_AND_SW_HARDENING_NEEDED: + return ErrSgxQlTcbConfigurationAndSwHardeningNeeded + case C.SGX_QL_UNSUPPORTED_MODE: + return ErrSgxQlUnsupportedMode + case C.SGX_QL_NO_DEVICE: + return ErrSgxQlNoDevice + case C.SGX_QL_SERVICE_UNAVAILABLE: + return ErrSgxQlServiceUnavailable + case C.SGX_QL_NETWORK_FAILURE: + return ErrSgxQlNetworkFailure + case C.SGX_QL_SERVICE_TIMEOUT: + return ErrSgxQlServiceTimeout + case C.SGX_QL_ERROR_BUSY: + return ErrSgxQlErrorBusy + case C.SGX_QL_UNKNOWN_MESSAGE_RESPONSE: + return ErrSgxQlUnknownMessageResponse + case C.SGX_QL_PERSISTENT_STORAGE_ERROR: + return ErrSgxQlPersistentStorageError + case C.SGX_QL_ERROR_MESSAGE_PARSING_ERROR: + return ErrSgxQlErrorMessageParsingError + case C.SGX_QL_PLATFORM_UNKNOWN: + return ErrSgxQlPlatformUnknown + case C.SGX_QL_UNKNOWN_API_VERSION: + return ErrSgxQlUnknownApiVersion + case C.SGX_QL_CERTS_UNAVAILABLE: + return ErrSgxQlCertsUnavailable + case C.SGX_QL_QVEIDENTITY_MISMATCH: + return ErrSgxQlQveidentityMismatch + case C.SGX_QL_QVE_OUT_OF_DATE: + return ErrSgxQlQveOutOfDate + case C.SGX_QL_PSW_NOT_AVAILABLE: + return ErrSgxQlPswNotAvailable + case C.SGX_QL_COLLATERAL_VERSION_NOT_SUPPORTED: + return ErrSgxQlCollateralVersionNotSupported + case C.SGX_QL_TDX_MODULE_MISMATCH: + return ErrSgxQlTdxModuleMismatch + case C.SGX_QL_QEIDENTITY_NOT_FOUND: + return ErrSgxQlQeidentityNotFound + case C.SGX_QL_TCBINFO_NOT_FOUND: + return ErrSgxQlTcbinfoNotFound + case C.SGX_QL_INTERNAL_SERVER_ERROR: + return ErrSgxQlInternalServerError + case C.SGX_QL_SUPPLEMENTAL_DATA_VERSION_NOT_SUPPORTED: + return ErrSgxQlSupplementalDataVersionNotSupported + case C.SGX_QL_ROOT_CA_UNTRUSTED: + return ErrSgxQlRootCaUntrusted + case C.SGX_QL_TCB_NOT_SUPPORTED: + return ErrSgxQlTcbNotSupported + } + return ErrSgxQlErrorUnexpected +} + +func verifyRemoteReportSGXCollateral(reportBytes []byte, pQuoteCollateral *C.sgx_ql_qve_collateral_t, expirationCheckDate int64) (*QuoteVerificationResult, error) { + if len(reportBytes) == 0 { + return nil, ErrEmptyReport + } + + var collateralExpirationStatus uint32 + var quoteVerificationResult uint32 + + var pSuppData = C.allocSupp() + var suppDataDesc = C.tee_supp_data_descriptor_t{ + major_version: 0, + data_size: C.uint(unsafe.Sizeof(C.sgx_ql_qv_supplemental_t{})), + p_data: (*C.uchar)(unsafe.Pointer(pSuppData)), + } + + var pReportBytes = C.CBytes(reportBytes) + + res := uint32(C.tee_verify_quote( + (*C.uint8_t)(pReportBytes), + C.uint32_t(len(reportBytes)), + (*C.uint8_t)(unsafe.Pointer(pQuoteCollateral)), + C.time_t(expirationCheckDate), + (*C.uint32_t)(&collateralExpirationStatus), + (*C.sgx_ql_qv_result_t)("eVerificationResult), + nil, + &suppDataDesc, + )) + + if res != C.SGX_QL_SUCCESS { + return nil, sgx2Error(res) + } + + var quote = Quote{} + var byteReader = bytes.NewReader(reportBytes) + err := binary.Read(byteReader, binary.BigEndian, "e) + if err != nil { + panic(err) + } + + var ret = QuoteVerificationResult{ + VerificationResult: SgxQlQvResult(quoteVerificationResult), + CollateralExpired: collateralExpirationStatus != 0, + EarliestExpirationDate: int64(pSuppData.earliest_expiration_date), + Quote: quote, + } + + return &ret, nil +} + +// SgxVerifyRemoteReport verifies the SGX attestation report. +// It needs to connect to servers to collect the collateral material. +func SgxVerifyRemoteReport(reportBytes []byte, expirationCheckDate int64) (*QuoteVerificationResult, error) { + if len(reportBytes) == 0 { + return nil, ErrEmptyReport + } + + var pQuoteCollateral *C.uint8_t = nil + var collateralSize C.uint32_t + res := uint32(C.tee_qv_get_collateral( + (*C.uint8_t)(&reportBytes[0]), + C.uint32_t(len(reportBytes)), + (**C.uint8_t)(&pQuoteCollateral), + (*C.uint32_t)(&collateralSize), + )) + + defer C.tee_qv_free_collateral(pQuoteCollateral) + + if res != C.SGX_QL_SUCCESS { + return nil, sgx2Error(res) + } + + return verifyRemoteReportSGXCollateral(reportBytes, (*C.sgx_ql_qve_collateral_t)(unsafe.Pointer(pQuoteCollateral)), expirationCheckDate) +} + +// SgxVerifyRemoteReportCollateral verifies the report along with the collateral material. +// It does not need to start an SGX enclave, nor does it need to connect to any server. +func SgxVerifyRemoteReportCollateral(reportBytes []byte, collateral TeeQvCollateral, expirationCheckDate int64) (*QuoteVerificationResult, error) { + var quoteCollateral = convertCollateral(collateral) + + return verifyRemoteReportSGXCollateral(reportBytes, "eCollateral, expirationCheckDate) +} + +func SgxGetCollateral(reportBytes []byte) (*TeeQvCollateral, error) { + var pQuoteCollateral *C.uint8_t = nil + var collateralSize C.uint32_t + res := uint32(C.tee_qv_get_collateral( + (*C.uint8_t)(&reportBytes[0]), + C.uint32_t(len(reportBytes)), + (**C.uint8_t)(&pQuoteCollateral), + (*C.uint32_t)(&collateralSize), + )) + + defer C.tee_qv_free_collateral(pQuoteCollateral) + + if res != C.SGX_QL_SUCCESS { + return nil, sgx2Error(res) + } + + coll := convertQveCollateral(*(*C.sgx_ql_qve_collateral_t)(unsafe.Pointer(pQuoteCollateral))) + + return &coll, nil +} + +func sgxGramineGetQuote(reportData []byte) ([]byte, error) { + // open "/dev/attestation/user_report_data" and write reportData + if err := os.WriteFile("/dev/attestation/user_report_data", reportData, 0666); err != nil { + return nil, err + } + + // open "/dev/attestation/quote" and read quote + quote, err := os.ReadFile("/dev/attestation/quote") + if err != nil { + return nil, err + } + return quote, nil +} + +func SgxGetQuote(reportData []byte) ([]byte, error) { + if len(reportData) > 64 { + reportData = reportData[:64] + } + if len(reportData) < 64 { + reportData = append(reportData, make([]byte, 64-len(reportData))...) + } + // only support Gramine for now + + // check if "/dev/attestation/user_report_data" and "/dev/attestation/quote" exist + if _, err := os.Stat("/dev/attestation/user_report_data"); err != nil { + return nil, err + } + if _, err := os.Stat("/dev/attestation/quote"); err != nil { + return nil, err + } + + return sgxGramineGetQuote(reportData) +} diff --git a/ratee/sgxquote_test.go b/ratee/sgxquote_test.go new file mode 100644 index 0000000..d814834 --- /dev/null +++ b/ratee/sgxquote_test.go @@ -0,0 +1,1491 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Matter Labs + +package ratee + +import ( + "encoding/base64" + "encoding/hex" + "encoding/json" + "github.com/stretchr/testify/require" + "testing" + "time" +) + +func TestVerifyRemoteReportCollateral(t *testing.T) { + var req = require.New(t) + + var quote = []byte{ + 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x0e, 0x00, 0x93, 0x9a, + 0x72, 0x33, 0xf7, 0x9c, 0x4c, 0xa9, 0x94, 0x0a, 0x0d, 0xb3, 0x95, 0x7f, 0x06, 0x07, + 0x60, 0x3d, 0x01, 0x4d, 0x6e, 0xc7, 0x0c, 0x69, 0x12, 0xb1, 0x21, 0x86, 0x76, 0xdc, + 0x96, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x10, 0x0f, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x94, 0x6b, 0x35, 0x47, 0xd3, 0xca, 0x03, 0x6f, 0x4d, 0xf7, 0xb5, 0x16, 0x85, + 0x7e, 0x28, 0xfd, 0x51, 0x2d, 0x69, 0xfe, 0xd3, 0x41, 0x1d, 0xc6, 0x60, 0x53, 0x79, + 0x12, 0xfa, 0xab, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x80, 0x37, 0xd8, 0x87, 0x82, + 0xe0, 0x22, 0xe0, 0x19, 0xb3, 0x02, 0x07, 0x45, 0xb7, 0x8a, 0xa4, 0x0e, 0xd9, 0x5c, + 0x77, 0xda, 0x4b, 0xf7, 0xf3, 0x25, 0x3d, 0x3a, 0x44, 0xc4, 0xfd, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x99, 0x7b, 0xfa, 0xe2, 0xd7, 0xf9, 0x08, 0x9d, 0x17, 0x6b, + 0x18, 0xb5, 0xce, 0xf2, 0xd8, 0x1d, 0xec, 0x1f, 0xd1, 0xdc, 0x33, 0x2e, 0x9b, 0x23, + 0xc5, 0x53, 0xc4, 0xe0, 0x2f, 0xe3, 0xe4, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x10, + 0x00, 0x00, 0xfb, 0xd3, 0x48, 0x81, 0xbe, 0xd9, 0x7f, 0x12, 0xe2, 0x77, 0xbd, 0x66, + 0xc6, 0xfc, 0x6b, 0x9c, 0x2a, 0x55, 0xa6, 0xd4, 0x86, 0x0a, 0xfb, 0xaf, 0x71, 0xa5, + 0xa5, 0x27, 0x2b, 0x2d, 0xa1, 0x8c, 0xbf, 0xc4, 0x43, 0x2d, 0x5a, 0xfd, 0x9f, 0xc3, + 0xbf, 0xf4, 0x27, 0xc0, 0x49, 0xad, 0x75, 0x96, 0xa9, 0x0e, 0xd4, 0x34, 0xfe, 0x26, + 0xa1, 0x53, 0xbb, 0xee, 0x4c, 0x8a, 0xd8, 0xe9, 0xda, 0xb9, 0xbf, 0xa6, 0xd9, 0x32, + 0xa0, 0x6f, 0x7d, 0x61, 0xf8, 0xf0, 0x77, 0x37, 0x6c, 0x51, 0x16, 0x50, 0xbd, 0x00, + 0xa2, 0x74, 0x10, 0xdd, 0x86, 0xbb, 0x75, 0x91, 0xca, 0xfe, 0xec, 0x7c, 0x13, 0x15, + 0xc7, 0xf5, 0x85, 0xb8, 0x9f, 0x07, 0x5d, 0xe4, 0x94, 0xd6, 0xba, 0x36, 0x9b, 0x26, + 0xe6, 0xc7, 0x3b, 0x48, 0xc8, 0x15, 0x5e, 0xb5, 0x4c, 0xf7, 0xcf, 0xb3, 0x0a, 0x3d, + 0x3e, 0x8d, 0x39, 0x5e, 0x0b, 0x0b, 0x10, 0x0f, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2a, + 0xa5, 0x0c, 0xe1, 0xc0, 0xce, 0xf0, 0x3c, 0xcf, 0x89, 0xe7, 0xb5, 0xb1, 0x6b, 0x0d, + 0x79, 0x78, 0xf5, 0xc2, 0xb1, 0xed, 0xcf, 0x77, 0x4d, 0x87, 0x70, 0x2e, 0x81, 0x54, + 0xd8, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x4f, 0x57, 0x75, 0xd7, 0x96, 0x50, 0x3e, + 0x96, 0x13, 0x7f, 0x77, 0xc6, 0x8a, 0x82, 0x9a, 0x00, 0x56, 0xac, 0x8d, 0xed, 0x70, + 0x14, 0x0b, 0x08, 0x1b, 0x09, 0x44, 0x90, 0xc5, 0x7b, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xcb, 0x66, 0xb1, 0xfa, 0xf4, 0x81, 0x87, 0x47, 0x8f, 0xc7, 0xd8, 0x30, + 0xa9, 0x92, 0xb6, 0x4f, 0x97, 0x89, 0x49, 0xef, 0x25, 0x99, 0xbe, 0x90, 0x11, 0xb1, + 0xe0, 0xb0, 0x50, 0x9f, 0xf0, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6a, 0xce, 0xf8, + 0x25, 0xe9, 0x30, 0x8b, 0xbc, 0x15, 0x86, 0x1a, 0x2d, 0xbf, 0x60, 0xc0, 0xdb, 0x0d, + 0x7a, 0x00, 0xa6, 0x91, 0x98, 0x0a, 0xef, 0x65, 0x7d, 0xc2, 0x3f, 0x0b, 0x0d, 0x09, + 0x89, 0x96, 0xf5, 0x1f, 0xa5, 0x9f, 0xaa, 0xcf, 0x8b, 0x58, 0x9b, 0x91, 0xee, 0x70, + 0x92, 0xbc, 0xba, 0x53, 0xdf, 0x40, 0xc0, 0x91, 0xa0, 0x5a, 0x30, 0x64, 0x5c, 0x4b, + 0x95, 0x71, 0x75, 0x12, 0x20, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x05, 0x00, 0x5e, 0x0e, + 0x00, 0x00, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, + 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, + 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x45, 0x38, 0x54, 0x43, 0x43, 0x42, 0x4a, 0x69, 0x67, + 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x55, 0x44, 0x32, 0x43, 0x50, 0x43, 0x34, + 0x65, 0x78, 0x33, 0x50, 0x72, 0x70, 0x7a, 0x50, 0x4f, 0x58, 0x45, 0x70, 0x6e, 0x55, + 0x32, 0x2b, 0x34, 0x33, 0x33, 0x62, 0x6f, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4b, 0x6f, + 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x77, 0x0a, 0x63, 0x44, 0x45, + 0x69, 0x4d, 0x43, 0x41, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x5a, 0x53, + 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, 0x49, 0x46, 0x42, + 0x44, 0x53, 0x79, 0x42, 0x51, 0x62, 0x47, 0x46, 0x30, 0x5a, 0x6d, 0x39, 0x79, 0x62, + 0x53, 0x42, 0x44, 0x51, 0x54, 0x45, 0x61, 0x4d, 0x42, 0x67, 0x47, 0x41, 0x31, 0x55, + 0x45, 0x43, 0x67, 0x77, 0x52, 0x0a, 0x53, 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, + 0x51, 0x32, 0x39, 0x79, 0x63, 0x47, 0x39, 0x79, 0x59, 0x58, 0x52, 0x70, 0x62, 0x32, + 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x63, 0x4d, + 0x43, 0x31, 0x4e, 0x68, 0x62, 0x6e, 0x52, 0x68, 0x49, 0x45, 0x4e, 0x73, 0x59, 0x58, + 0x4a, 0x68, 0x4d, 0x51, 0x73, 0x77, 0x43, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x49, + 0x0a, 0x44, 0x41, 0x4a, 0x44, 0x51, 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, + 0x31, 0x55, 0x45, 0x42, 0x68, 0x4d, 0x43, 0x56, 0x56, 0x4d, 0x77, 0x48, 0x68, 0x63, + 0x4e, 0x4d, 0x6a, 0x4d, 0x77, 0x4e, 0x54, 0x45, 0x77, 0x4d, 0x6a, 0x41, 0x79, 0x4e, + 0x44, 0x55, 0x32, 0x57, 0x68, 0x63, 0x4e, 0x4d, 0x7a, 0x41, 0x77, 0x4e, 0x54, 0x45, + 0x77, 0x4d, 0x6a, 0x41, 0x79, 0x4e, 0x44, 0x55, 0x32, 0x0a, 0x57, 0x6a, 0x42, 0x77, + 0x4d, 0x53, 0x49, 0x77, 0x49, 0x41, 0x59, 0x44, 0x56, 0x51, 0x51, 0x44, 0x44, 0x42, + 0x6c, 0x4a, 0x62, 0x6e, 0x52, 0x6c, 0x62, 0x43, 0x42, 0x54, 0x52, 0x31, 0x67, 0x67, + 0x55, 0x45, 0x4e, 0x4c, 0x49, 0x45, 0x4e, 0x6c, 0x63, 0x6e, 0x52, 0x70, 0x5a, 0x6d, + 0x6c, 0x6a, 0x59, 0x58, 0x52, 0x6c, 0x4d, 0x52, 0x6f, 0x77, 0x47, 0x41, 0x59, 0x44, + 0x56, 0x51, 0x51, 0x4b, 0x0a, 0x44, 0x42, 0x46, 0x4a, 0x62, 0x6e, 0x52, 0x6c, 0x62, + 0x43, 0x42, 0x44, 0x62, 0x33, 0x4a, 0x77, 0x62, 0x33, 0x4a, 0x68, 0x64, 0x47, 0x6c, + 0x76, 0x62, 0x6a, 0x45, 0x55, 0x4d, 0x42, 0x49, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, + 0x77, 0x77, 0x4c, 0x55, 0x32, 0x46, 0x75, 0x64, 0x47, 0x45, 0x67, 0x51, 0x32, 0x78, + 0x68, 0x63, 0x6d, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x0a, + 0x42, 0x41, 0x67, 0x4d, 0x41, 0x6b, 0x4e, 0x42, 0x4d, 0x51, 0x73, 0x77, 0x43, 0x51, + 0x59, 0x44, 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4a, 0x56, 0x55, 0x7a, 0x42, 0x5a, + 0x4d, 0x42, 0x4d, 0x47, 0x42, 0x79, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x41, 0x67, + 0x45, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x41, 0x77, 0x45, 0x48, + 0x41, 0x30, 0x49, 0x41, 0x42, 0x44, 0x75, 0x65, 0x0a, 0x43, 0x38, 0x59, 0x76, 0x2f, + 0x52, 0x67, 0x67, 0x65, 0x79, 0x72, 0x75, 0x79, 0x71, 0x6a, 0x66, 0x52, 0x58, 0x72, + 0x76, 0x4d, 0x59, 0x46, 0x30, 0x68, 0x52, 0x78, 0x51, 0x77, 0x57, 0x6e, 0x79, 0x6f, + 0x68, 0x55, 0x74, 0x2f, 0x77, 0x65, 0x63, 0x79, 0x4c, 0x65, 0x2f, 0x66, 0x32, 0x44, + 0x47, 0x59, 0x48, 0x69, 0x35, 0x46, 0x53, 0x46, 0x2f, 0x36, 0x67, 0x52, 0x69, 0x53, + 0x38, 0x2f, 0x56, 0x0a, 0x36, 0x62, 0x62, 0x57, 0x7a, 0x6d, 0x71, 0x32, 0x71, 0x30, + 0x6c, 0x66, 0x6f, 0x4c, 0x7a, 0x2f, 0x61, 0x30, 0x47, 0x6a, 0x67, 0x67, 0x4d, 0x4f, + 0x4d, 0x49, 0x49, 0x44, 0x43, 0x6a, 0x41, 0x66, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x53, + 0x4d, 0x45, 0x47, 0x44, 0x41, 0x57, 0x67, 0x42, 0x53, 0x56, 0x62, 0x31, 0x33, 0x4e, + 0x76, 0x52, 0x76, 0x68, 0x36, 0x55, 0x42, 0x4a, 0x79, 0x64, 0x54, 0x30, 0x0a, 0x4d, + 0x38, 0x34, 0x42, 0x56, 0x77, 0x76, 0x65, 0x56, 0x44, 0x42, 0x72, 0x42, 0x67, 0x4e, + 0x56, 0x48, 0x52, 0x38, 0x45, 0x5a, 0x44, 0x42, 0x69, 0x4d, 0x47, 0x43, 0x67, 0x58, + 0x71, 0x42, 0x63, 0x68, 0x6c, 0x70, 0x6f, 0x64, 0x48, 0x52, 0x77, 0x63, 0x7a, 0x6f, + 0x76, 0x4c, 0x32, 0x46, 0x77, 0x61, 0x53, 0x35, 0x30, 0x63, 0x6e, 0x56, 0x7a, 0x64, + 0x47, 0x56, 0x6b, 0x63, 0x32, 0x56, 0x79, 0x0a, 0x64, 0x6d, 0x6c, 0x6a, 0x5a, 0x58, + 0x4d, 0x75, 0x61, 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, + 0x4c, 0x33, 0x4e, 0x6e, 0x65, 0x43, 0x39, 0x6a, 0x5a, 0x58, 0x4a, 0x30, 0x61, 0x57, + 0x5a, 0x70, 0x59, 0x32, 0x46, 0x30, 0x61, 0x57, 0x39, 0x75, 0x4c, 0x33, 0x59, 0x7a, + 0x4c, 0x33, 0x42, 0x6a, 0x61, 0x32, 0x4e, 0x79, 0x62, 0x44, 0x39, 0x6a, 0x59, 0x54, + 0x31, 0x77, 0x0a, 0x62, 0x47, 0x46, 0x30, 0x5a, 0x6d, 0x39, 0x79, 0x62, 0x53, 0x5a, + 0x6c, 0x62, 0x6d, 0x4e, 0x76, 0x5a, 0x47, 0x6c, 0x75, 0x5a, 0x7a, 0x31, 0x6b, 0x5a, + 0x58, 0x49, 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x4f, 0x42, 0x42, 0x59, + 0x45, 0x46, 0x4a, 0x2f, 0x79, 0x76, 0x68, 0x71, 0x57, 0x49, 0x41, 0x77, 0x4a, 0x6b, + 0x39, 0x32, 0x48, 0x6d, 0x7a, 0x63, 0x49, 0x6b, 0x6b, 0x79, 0x67, 0x0a, 0x31, 0x41, + 0x43, 0x41, 0x4d, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, + 0x2f, 0x77, 0x51, 0x45, 0x41, 0x77, 0x49, 0x47, 0x77, 0x44, 0x41, 0x4d, 0x42, 0x67, + 0x4e, 0x56, 0x48, 0x52, 0x4d, 0x42, 0x41, 0x66, 0x38, 0x45, 0x41, 0x6a, 0x41, 0x41, + 0x4d, 0x49, 0x49, 0x43, 0x4f, 0x77, 0x59, 0x4a, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, + 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x0a, 0x42, 0x49, 0x49, 0x43, 0x4c, 0x44, 0x43, + 0x43, 0x41, 0x69, 0x67, 0x77, 0x48, 0x67, 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, + 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x51, 0x51, 0x51, 0x71, 0x66, 0x37, + 0x30, 0x49, 0x38, 0x64, 0x67, 0x62, 0x4b, 0x30, 0x78, 0x65, 0x6d, 0x68, 0x46, 0x34, + 0x4c, 0x4c, 0x48, 0x33, 0x7a, 0x43, 0x43, 0x41, 0x57, 0x55, 0x47, 0x43, 0x69, 0x71, + 0x47, 0x0a, 0x53, 0x49, 0x62, 0x34, 0x54, 0x51, 0x45, 0x4e, 0x41, 0x51, 0x49, 0x77, + 0x67, 0x67, 0x46, 0x56, 0x4d, 0x42, 0x41, 0x47, 0x43, 0x79, 0x71, 0x47, 0x53, 0x49, + 0x62, 0x34, 0x54, 0x51, 0x45, 0x4e, 0x41, 0x51, 0x49, 0x42, 0x41, 0x67, 0x45, 0x4c, + 0x4d, 0x42, 0x41, 0x47, 0x43, 0x79, 0x71, 0x47, 0x53, 0x49, 0x62, 0x34, 0x54, 0x51, + 0x45, 0x4e, 0x41, 0x51, 0x49, 0x43, 0x41, 0x67, 0x45, 0x4c, 0x0a, 0x4d, 0x42, 0x41, + 0x47, 0x43, 0x79, 0x71, 0x47, 0x53, 0x49, 0x62, 0x34, 0x54, 0x51, 0x45, 0x4e, 0x41, + 0x51, 0x49, 0x44, 0x41, 0x67, 0x45, 0x44, 0x4d, 0x42, 0x41, 0x47, 0x43, 0x79, 0x71, + 0x47, 0x53, 0x49, 0x62, 0x34, 0x54, 0x51, 0x45, 0x4e, 0x41, 0x51, 0x49, 0x45, 0x41, + 0x67, 0x45, 0x44, 0x4d, 0x42, 0x45, 0x47, 0x43, 0x79, 0x71, 0x47, 0x53, 0x49, 0x62, + 0x34, 0x54, 0x51, 0x45, 0x4e, 0x0a, 0x41, 0x51, 0x49, 0x46, 0x41, 0x67, 0x49, 0x41, + 0x2f, 0x7a, 0x41, 0x52, 0x42, 0x67, 0x73, 0x71, 0x68, 0x6b, 0x69, 0x47, 0x2b, 0x45, + 0x30, 0x42, 0x44, 0x51, 0x45, 0x43, 0x42, 0x67, 0x49, 0x43, 0x41, 0x50, 0x38, 0x77, + 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, + 0x30, 0x42, 0x41, 0x67, 0x63, 0x43, 0x41, 0x51, 0x45, 0x77, 0x45, 0x41, 0x59, 0x4c, + 0x0a, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, + 0x67, 0x67, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, + 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x6b, 0x43, 0x41, + 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, + 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x6f, 0x43, 0x0a, 0x41, 0x51, 0x41, 0x77, + 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, + 0x30, 0x42, 0x41, 0x67, 0x73, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, + 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, + 0x77, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, + 0x68, 0x76, 0x68, 0x4e, 0x0a, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x30, 0x43, 0x41, + 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, + 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x34, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, + 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, + 0x42, 0x41, 0x67, 0x38, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x0a, + 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, + 0x41, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, + 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, 0x45, 0x43, 0x41, 0x51, + 0x30, 0x77, 0x48, 0x77, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, + 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, 0x49, 0x45, 0x0a, 0x45, 0x41, 0x73, 0x4c, 0x41, + 0x77, 0x50, 0x2f, 0x2f, 0x77, 0x45, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, + 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x77, 0x51, 0x43, 0x41, 0x41, 0x41, + 0x77, 0x46, 0x41, 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, + 0x51, 0x30, 0x42, 0x0a, 0x42, 0x41, 0x51, 0x47, 0x41, 0x47, 0x42, 0x71, 0x41, 0x41, + 0x41, 0x41, 0x4d, 0x41, 0x38, 0x47, 0x43, 0x69, 0x71, 0x47, 0x53, 0x49, 0x62, 0x34, + 0x54, 0x51, 0x45, 0x4e, 0x41, 0x51, 0x55, 0x4b, 0x41, 0x51, 0x45, 0x77, 0x48, 0x67, + 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, + 0x42, 0x67, 0x51, 0x51, 0x4b, 0x44, 0x6f, 0x2b, 0x7a, 0x75, 0x67, 0x68, 0x0a, 0x38, + 0x5a, 0x63, 0x4c, 0x41, 0x30, 0x4f, 0x61, 0x33, 0x70, 0x52, 0x6b, 0x64, 0x44, 0x42, + 0x45, 0x42, 0x67, 0x6f, 0x71, 0x68, 0x6b, 0x69, 0x47, 0x2b, 0x45, 0x30, 0x42, 0x44, + 0x51, 0x45, 0x48, 0x4d, 0x44, 0x59, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, + 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x42, 0x77, 0x45, 0x42, 0x41, + 0x66, 0x38, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x0a, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, + 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x42, 0x77, 0x49, 0x42, 0x41, 0x51, 0x41, 0x77, + 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, + 0x30, 0x42, 0x42, 0x77, 0x4d, 0x42, 0x41, 0x51, 0x41, 0x77, 0x43, 0x67, 0x59, 0x49, + 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x44, 0x52, 0x77, + 0x41, 0x77, 0x0a, 0x52, 0x41, 0x49, 0x67, 0x44, 0x70, 0x66, 0x64, 0x5a, 0x6d, 0x54, + 0x4e, 0x48, 0x62, 0x75, 0x51, 0x68, 0x51, 0x34, 0x73, 0x46, 0x4c, 0x4a, 0x76, 0x79, + 0x73, 0x32, 0x33, 0x63, 0x66, 0x71, 0x75, 0x64, 0x75, 0x38, 0x30, 0x59, 0x71, 0x49, + 0x44, 0x56, 0x6e, 0x6e, 0x77, 0x63, 0x4f, 0x45, 0x43, 0x49, 0x46, 0x68, 0x54, 0x30, + 0x51, 0x76, 0x47, 0x6c, 0x6a, 0x4b, 0x51, 0x52, 0x33, 0x63, 0x6f, 0x0a, 0x50, 0x6a, + 0x38, 0x68, 0x68, 0x48, 0x54, 0x39, 0x6a, 0x75, 0x56, 0x61, 0x71, 0x64, 0x33, 0x54, + 0x72, 0x74, 0x4d, 0x58, 0x44, 0x31, 0x50, 0x64, 0x48, 0x59, 0x58, 0x76, 0x0a, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, + 0x43, 0x6c, 0x6a, 0x43, 0x43, 0x41, 0x6a, 0x32, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, + 0x67, 0x49, 0x56, 0x41, 0x4a, 0x56, 0x76, 0x58, 0x63, 0x32, 0x39, 0x47, 0x2b, 0x48, + 0x70, 0x51, 0x45, 0x6e, 0x4a, 0x31, 0x50, 0x51, 0x7a, 0x7a, 0x67, 0x46, 0x58, 0x43, + 0x39, 0x35, 0x55, 0x4d, 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, + 0x39, 0x42, 0x41, 0x4d, 0x43, 0x0a, 0x4d, 0x47, 0x67, 0x78, 0x47, 0x6a, 0x41, 0x59, + 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x4d, 0x4d, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, + 0x56, 0x73, 0x49, 0x46, 0x4e, 0x48, 0x57, 0x43, 0x42, 0x53, 0x62, 0x32, 0x39, 0x30, + 0x49, 0x45, 0x4e, 0x42, 0x4d, 0x52, 0x6f, 0x77, 0x47, 0x41, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x4b, 0x44, 0x42, 0x46, 0x4a, 0x62, 0x6e, 0x52, 0x6c, 0x62, 0x43, 0x42, 0x44, + 0x0a, 0x62, 0x33, 0x4a, 0x77, 0x62, 0x33, 0x4a, 0x68, 0x64, 0x47, 0x6c, 0x76, 0x62, + 0x6a, 0x45, 0x55, 0x4d, 0x42, 0x49, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x77, 0x77, + 0x4c, 0x55, 0x32, 0x46, 0x75, 0x64, 0x47, 0x45, 0x67, 0x51, 0x32, 0x78, 0x68, 0x63, + 0x6d, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x67, + 0x4d, 0x41, 0x6b, 0x4e, 0x42, 0x4d, 0x51, 0x73, 0x77, 0x0a, 0x43, 0x51, 0x59, 0x44, + 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4a, 0x56, 0x55, 0x7a, 0x41, 0x65, 0x46, 0x77, + 0x30, 0x78, 0x4f, 0x44, 0x41, 0x31, 0x4d, 0x6a, 0x45, 0x78, 0x4d, 0x44, 0x55, 0x77, + 0x4d, 0x54, 0x42, 0x61, 0x46, 0x77, 0x30, 0x7a, 0x4d, 0x7a, 0x41, 0x31, 0x4d, 0x6a, + 0x45, 0x78, 0x4d, 0x44, 0x55, 0x77, 0x4d, 0x54, 0x42, 0x61, 0x4d, 0x48, 0x41, 0x78, + 0x49, 0x6a, 0x41, 0x67, 0x0a, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x4d, 0x4d, 0x47, + 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x49, 0x46, 0x4e, 0x48, 0x57, 0x43, 0x42, + 0x51, 0x51, 0x30, 0x73, 0x67, 0x55, 0x47, 0x78, 0x68, 0x64, 0x47, 0x5a, 0x76, 0x63, + 0x6d, 0x30, 0x67, 0x51, 0x30, 0x45, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, 0x67, 0x4e, + 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x0a, + 0x49, 0x45, 0x4e, 0x76, 0x63, 0x6e, 0x42, 0x76, 0x63, 0x6d, 0x46, 0x30, 0x61, 0x57, + 0x39, 0x75, 0x4d, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, + 0x44, 0x41, 0x74, 0x54, 0x59, 0x57, 0x35, 0x30, 0x59, 0x53, 0x42, 0x44, 0x62, 0x47, + 0x46, 0x79, 0x59, 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, 0x31, 0x55, 0x45, + 0x43, 0x41, 0x77, 0x43, 0x51, 0x30, 0x45, 0x78, 0x0a, 0x43, 0x7a, 0x41, 0x4a, 0x42, + 0x67, 0x4e, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6c, 0x56, 0x54, 0x4d, 0x46, 0x6b, + 0x77, 0x45, 0x77, 0x59, 0x48, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x43, 0x41, + 0x51, 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x44, 0x41, 0x51, 0x63, + 0x44, 0x51, 0x67, 0x41, 0x45, 0x4e, 0x53, 0x42, 0x2f, 0x37, 0x74, 0x32, 0x31, 0x6c, + 0x58, 0x53, 0x4f, 0x0a, 0x32, 0x43, 0x75, 0x7a, 0x70, 0x78, 0x77, 0x37, 0x34, 0x65, + 0x4a, 0x42, 0x37, 0x32, 0x45, 0x79, 0x44, 0x47, 0x67, 0x57, 0x35, 0x72, 0x58, 0x43, + 0x74, 0x78, 0x32, 0x74, 0x56, 0x54, 0x4c, 0x71, 0x36, 0x68, 0x4b, 0x6b, 0x36, 0x7a, + 0x2b, 0x55, 0x69, 0x52, 0x5a, 0x43, 0x6e, 0x71, 0x52, 0x37, 0x70, 0x73, 0x4f, 0x76, + 0x67, 0x71, 0x46, 0x65, 0x53, 0x78, 0x6c, 0x6d, 0x54, 0x6c, 0x4a, 0x6c, 0x0a, 0x65, + 0x54, 0x6d, 0x69, 0x32, 0x57, 0x59, 0x7a, 0x33, 0x71, 0x4f, 0x42, 0x75, 0x7a, 0x43, + 0x42, 0x75, 0x44, 0x41, 0x66, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x53, 0x4d, 0x45, 0x47, + 0x44, 0x41, 0x57, 0x67, 0x42, 0x51, 0x69, 0x5a, 0x51, 0x7a, 0x57, 0x57, 0x70, 0x30, + 0x30, 0x69, 0x66, 0x4f, 0x44, 0x74, 0x4a, 0x56, 0x53, 0x76, 0x31, 0x41, 0x62, 0x4f, + 0x53, 0x63, 0x47, 0x72, 0x44, 0x42, 0x53, 0x0a, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x52, + 0x38, 0x45, 0x53, 0x7a, 0x42, 0x4a, 0x4d, 0x45, 0x65, 0x67, 0x52, 0x61, 0x42, 0x44, + 0x68, 0x6b, 0x46, 0x6f, 0x64, 0x48, 0x52, 0x77, 0x63, 0x7a, 0x6f, 0x76, 0x4c, 0x32, + 0x4e, 0x6c, 0x63, 0x6e, 0x52, 0x70, 0x5a, 0x6d, 0x6c, 0x6a, 0x59, 0x58, 0x52, 0x6c, + 0x63, 0x79, 0x35, 0x30, 0x63, 0x6e, 0x56, 0x7a, 0x64, 0x47, 0x56, 0x6b, 0x63, 0x32, + 0x56, 0x79, 0x0a, 0x64, 0x6d, 0x6c, 0x6a, 0x5a, 0x58, 0x4d, 0x75, 0x61, 0x57, 0x35, + 0x30, 0x5a, 0x57, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4c, 0x30, 0x6c, 0x75, 0x64, + 0x47, 0x56, 0x73, 0x55, 0x30, 0x64, 0x59, 0x55, 0x6d, 0x39, 0x76, 0x64, 0x45, 0x4e, + 0x42, 0x4c, 0x6d, 0x52, 0x6c, 0x63, 0x6a, 0x41, 0x64, 0x42, 0x67, 0x4e, 0x56, 0x48, + 0x51, 0x34, 0x45, 0x46, 0x67, 0x51, 0x55, 0x6c, 0x57, 0x39, 0x64, 0x0a, 0x7a, 0x62, + 0x30, 0x62, 0x34, 0x65, 0x6c, 0x41, 0x53, 0x63, 0x6e, 0x55, 0x39, 0x44, 0x50, 0x4f, + 0x41, 0x56, 0x63, 0x4c, 0x33, 0x6c, 0x51, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x52, + 0x30, 0x50, 0x41, 0x51, 0x48, 0x2f, 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x45, 0x47, + 0x4d, 0x42, 0x49, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, 0x42, 0x2f, 0x77, + 0x51, 0x49, 0x4d, 0x41, 0x59, 0x42, 0x0a, 0x41, 0x66, 0x38, 0x43, 0x41, 0x51, 0x41, + 0x77, 0x43, 0x67, 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, + 0x77, 0x49, 0x44, 0x52, 0x77, 0x41, 0x77, 0x52, 0x41, 0x49, 0x67, 0x58, 0x73, 0x56, + 0x6b, 0x69, 0x30, 0x77, 0x2b, 0x69, 0x36, 0x56, 0x59, 0x47, 0x57, 0x33, 0x55, 0x46, + 0x2f, 0x32, 0x32, 0x75, 0x61, 0x58, 0x65, 0x30, 0x59, 0x4a, 0x44, 0x6a, 0x31, 0x55, + 0x65, 0x0a, 0x6e, 0x41, 0x2b, 0x54, 0x6a, 0x44, 0x31, 0x61, 0x69, 0x35, 0x63, 0x43, + 0x49, 0x43, 0x59, 0x62, 0x31, 0x53, 0x41, 0x6d, 0x44, 0x35, 0x78, 0x6b, 0x66, 0x54, + 0x56, 0x70, 0x76, 0x6f, 0x34, 0x55, 0x6f, 0x79, 0x69, 0x53, 0x59, 0x78, 0x72, 0x44, + 0x57, 0x4c, 0x6d, 0x55, 0x52, 0x34, 0x43, 0x49, 0x39, 0x4e, 0x4b, 0x79, 0x66, 0x50, + 0x4e, 0x2b, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, + 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, 0x45, + 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x6a, 0x7a, 0x43, 0x43, 0x41, 0x6a, 0x53, 0x67, 0x41, + 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x55, 0x49, 0x6d, 0x55, 0x4d, 0x31, 0x6c, 0x71, + 0x64, 0x4e, 0x49, 0x6e, 0x7a, 0x67, 0x37, 0x53, 0x56, 0x55, 0x72, 0x39, 0x51, 0x47, + 0x7a, 0x6b, 0x6e, 0x42, 0x71, 0x77, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4b, 0x6f, 0x5a, + 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x77, 0x0a, 0x61, 0x44, 0x45, 0x61, + 0x4d, 0x42, 0x67, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x52, 0x53, 0x57, + 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, 0x49, 0x46, 0x4a, 0x76, + 0x62, 0x33, 0x51, 0x67, 0x51, 0x30, 0x45, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, 0x67, + 0x4e, 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, + 0x49, 0x45, 0x4e, 0x76, 0x0a, 0x63, 0x6e, 0x42, 0x76, 0x63, 0x6d, 0x46, 0x30, 0x61, + 0x57, 0x39, 0x75, 0x4d, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, + 0x48, 0x44, 0x41, 0x74, 0x54, 0x59, 0x57, 0x35, 0x30, 0x59, 0x53, 0x42, 0x44, 0x62, + 0x47, 0x46, 0x79, 0x59, 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, 0x31, 0x55, + 0x45, 0x43, 0x41, 0x77, 0x43, 0x51, 0x30, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x0a, + 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6c, 0x56, 0x54, 0x4d, 0x42, + 0x34, 0x58, 0x44, 0x54, 0x45, 0x34, 0x4d, 0x44, 0x55, 0x79, 0x4d, 0x54, 0x45, 0x77, + 0x4e, 0x44, 0x55, 0x78, 0x4d, 0x46, 0x6f, 0x58, 0x44, 0x54, 0x51, 0x35, 0x4d, 0x54, + 0x49, 0x7a, 0x4d, 0x54, 0x49, 0x7a, 0x4e, 0x54, 0x6b, 0x31, 0x4f, 0x56, 0x6f, 0x77, + 0x61, 0x44, 0x45, 0x61, 0x4d, 0x42, 0x67, 0x47, 0x0a, 0x41, 0x31, 0x55, 0x45, 0x41, + 0x77, 0x77, 0x52, 0x53, 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, + 0x59, 0x49, 0x46, 0x4a, 0x76, 0x62, 0x33, 0x51, 0x67, 0x51, 0x30, 0x45, 0x78, 0x47, + 0x6a, 0x41, 0x59, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x45, 0x55, 0x6c, + 0x75, 0x64, 0x47, 0x56, 0x73, 0x49, 0x45, 0x4e, 0x76, 0x63, 0x6e, 0x42, 0x76, 0x63, + 0x6d, 0x46, 0x30, 0x0a, 0x61, 0x57, 0x39, 0x75, 0x4d, 0x52, 0x51, 0x77, 0x45, 0x67, + 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x74, 0x54, 0x59, 0x57, 0x35, 0x30, + 0x59, 0x53, 0x42, 0x44, 0x62, 0x47, 0x46, 0x79, 0x59, 0x54, 0x45, 0x4c, 0x4d, 0x41, + 0x6b, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x41, 0x77, 0x43, 0x51, 0x30, 0x45, 0x78, + 0x43, 0x7a, 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x59, 0x54, 0x0a, 0x41, + 0x6c, 0x56, 0x54, 0x4d, 0x46, 0x6b, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4b, 0x6f, 0x5a, + 0x49, 0x7a, 0x6a, 0x30, 0x43, 0x41, 0x51, 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, + 0x6a, 0x30, 0x44, 0x41, 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x43, 0x36, 0x6e, + 0x45, 0x77, 0x4d, 0x44, 0x49, 0x59, 0x5a, 0x4f, 0x6a, 0x2f, 0x69, 0x50, 0x57, 0x73, + 0x43, 0x7a, 0x61, 0x45, 0x4b, 0x69, 0x37, 0x0a, 0x31, 0x4f, 0x69, 0x4f, 0x53, 0x4c, + 0x52, 0x46, 0x68, 0x57, 0x47, 0x6a, 0x62, 0x6e, 0x42, 0x56, 0x4a, 0x66, 0x56, 0x6e, + 0x6b, 0x59, 0x34, 0x75, 0x33, 0x49, 0x6a, 0x6b, 0x44, 0x59, 0x59, 0x4c, 0x30, 0x4d, + 0x78, 0x4f, 0x34, 0x6d, 0x71, 0x73, 0x79, 0x59, 0x6a, 0x6c, 0x42, 0x61, 0x6c, 0x54, + 0x56, 0x59, 0x78, 0x46, 0x50, 0x32, 0x73, 0x4a, 0x42, 0x4b, 0x35, 0x7a, 0x6c, 0x4b, + 0x4f, 0x42, 0x0a, 0x75, 0x7a, 0x43, 0x42, 0x75, 0x44, 0x41, 0x66, 0x42, 0x67, 0x4e, + 0x56, 0x48, 0x53, 0x4d, 0x45, 0x47, 0x44, 0x41, 0x57, 0x67, 0x42, 0x51, 0x69, 0x5a, + 0x51, 0x7a, 0x57, 0x57, 0x70, 0x30, 0x30, 0x69, 0x66, 0x4f, 0x44, 0x74, 0x4a, 0x56, + 0x53, 0x76, 0x31, 0x41, 0x62, 0x4f, 0x53, 0x63, 0x47, 0x72, 0x44, 0x42, 0x53, 0x42, + 0x67, 0x4e, 0x56, 0x48, 0x52, 0x38, 0x45, 0x53, 0x7a, 0x42, 0x4a, 0x0a, 0x4d, 0x45, + 0x65, 0x67, 0x52, 0x61, 0x42, 0x44, 0x68, 0x6b, 0x46, 0x6f, 0x64, 0x48, 0x52, 0x77, + 0x63, 0x7a, 0x6f, 0x76, 0x4c, 0x32, 0x4e, 0x6c, 0x63, 0x6e, 0x52, 0x70, 0x5a, 0x6d, + 0x6c, 0x6a, 0x59, 0x58, 0x52, 0x6c, 0x63, 0x79, 0x35, 0x30, 0x63, 0x6e, 0x56, 0x7a, + 0x64, 0x47, 0x56, 0x6b, 0x63, 0x32, 0x56, 0x79, 0x64, 0x6d, 0x6c, 0x6a, 0x5a, 0x58, + 0x4d, 0x75, 0x61, 0x57, 0x35, 0x30, 0x0a, 0x5a, 0x57, 0x77, 0x75, 0x59, 0x32, 0x39, + 0x74, 0x4c, 0x30, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x55, 0x30, 0x64, 0x59, 0x55, + 0x6d, 0x39, 0x76, 0x64, 0x45, 0x4e, 0x42, 0x4c, 0x6d, 0x52, 0x6c, 0x63, 0x6a, 0x41, + 0x64, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x51, 0x34, 0x45, 0x46, 0x67, 0x51, 0x55, 0x49, + 0x6d, 0x55, 0x4d, 0x31, 0x6c, 0x71, 0x64, 0x4e, 0x49, 0x6e, 0x7a, 0x67, 0x37, 0x53, + 0x56, 0x0a, 0x55, 0x72, 0x39, 0x51, 0x47, 0x7a, 0x6b, 0x6e, 0x42, 0x71, 0x77, 0x77, + 0x44, 0x67, 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, 0x2f, 0x42, 0x41, + 0x51, 0x44, 0x41, 0x67, 0x45, 0x47, 0x4d, 0x42, 0x49, 0x47, 0x41, 0x31, 0x55, 0x64, + 0x45, 0x77, 0x45, 0x42, 0x2f, 0x77, 0x51, 0x49, 0x4d, 0x41, 0x59, 0x42, 0x41, 0x66, + 0x38, 0x43, 0x41, 0x51, 0x45, 0x77, 0x43, 0x67, 0x59, 0x49, 0x0a, 0x4b, 0x6f, 0x5a, + 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x44, 0x53, 0x51, 0x41, 0x77, 0x52, + 0x67, 0x49, 0x68, 0x41, 0x4f, 0x57, 0x2f, 0x35, 0x51, 0x6b, 0x52, 0x2b, 0x53, 0x39, + 0x43, 0x69, 0x53, 0x44, 0x63, 0x4e, 0x6f, 0x6f, 0x77, 0x4c, 0x75, 0x50, 0x52, 0x4c, + 0x73, 0x57, 0x47, 0x66, 0x2f, 0x59, 0x69, 0x37, 0x47, 0x53, 0x58, 0x39, 0x34, 0x42, + 0x67, 0x77, 0x54, 0x77, 0x67, 0x0a, 0x41, 0x69, 0x45, 0x41, 0x34, 0x4a, 0x30, 0x6c, + 0x72, 0x48, 0x6f, 0x4d, 0x73, 0x2b, 0x58, 0x6f, 0x35, 0x6f, 0x2f, 0x73, 0x58, 0x36, + 0x4f, 0x39, 0x51, 0x57, 0x78, 0x48, 0x52, 0x41, 0x76, 0x5a, 0x55, 0x47, 0x4f, 0x64, + 0x52, 0x51, 0x37, 0x63, 0x76, 0x71, 0x52, 0x58, 0x61, 0x71, 0x49, 0x3d, 0x0a, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x00, + } + + quoteBase64 := base64.StdEncoding.EncodeToString(quote) + t.Log("Quote: " + quoteBase64) + + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC).Unix() + var expirationCheckDate = expectedExpirationDate - 1 + + var jsonCollateralBlob = []byte(`{"major_version":1,"minor_version":0,"tee_type":0,"pck_crl_issuer_chain":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNsakNDQWoyZ0F3SUJBZ0lWQUpWdlhjMjlHK0hwUUVuSjFQUXp6Z0ZYQzk1VU1Bb0dDQ3FHU000OUJBTUMKTUdneEdqQVlCZ05WQkFNTUVVbHVkR1ZzSUZOSFdDQlNiMjkwSUVOQk1Sb3dHQVlEVlFRS0RCRkpiblJsYkNCRApiM0p3YjNKaGRHbHZiakVVTUJJR0ExVUVCd3dMVTJGdWRHRWdRMnhoY21FeEN6QUpCZ05WQkFnTUFrTkJNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4T0RBMU1qRXhNRFV3TVRCYUZ3MHpNekExTWpFeE1EVXdNVEJhTUhBeElqQWcKQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWcwpJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4CkN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOU0IvN3QyMWxYU08KMkN1enB4dzc0ZUpCNzJFeURHZ1c1clhDdHgydFZUTHE2aEtrNnorVWlSWkNucVI3cHNPdmdxRmVTeGxtVGxKbAplVG1pMldZejNxT0J1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTCkJnTlZIUjhFU3pCSk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnkKZG1salpYTXVhVzUwWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVbFc5ZAp6YjBiNGVsQVNjblU5RFBPQVZjTDNsUXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWHNWa2kwdytpNlZZR1czVUYvMjJ1YVhlMFlKRGoxVWUKbkErVGpEMWFpNWNDSUNZYjFTQW1ENXhrZlRWcHZvNFVveWlTWXhyRFdMbVVSNENJOU5LeWZQTisKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA","root_ca_crl":"LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCk1JSUJJVENCeUFJQkFUQUtCZ2dxaGtqT1BRUURBakJvTVJvd0dBWURWUVFEREJGSmJuUmxiQ0JUUjFnZ1VtOXYKZENCRFFURWFNQmdHQTFVRUNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVkJBY01DMU5oYm5SaApJRU5zWVhKaE1Rc3dDUVlEVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNWERUSXpNRFF3TXpFd01qSTFNVm9YCkRUSTBNRFF3TWpFd01qSTFNVnFnTHpBdE1Bb0dBMVVkRkFRREFnRUJNQjhHQTFVZEl3UVlNQmFBRkNKbEROWmEKblRTSjg0TzBsVksvVUJzNUp3YXNNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJRkZYZlVmWis2Rlh0bDhldGZSbAplN3hlVnN5dmMxb0Q4YmxqMXdTQVdyRVlBaUVBazVBVjdCWTI1K3I2WDBKc0hrQW1SOFp6RXl0b1VNcTlhTTcyCnV0ZG9LZ009Ci0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KAA==","pck_crl":"LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCk1JSUtZVENDQ2dnQ0FRRXdDZ1lJS29aSXpqMEVBd0l3Y0RFaU1DQUdBMVVFQXd3WlNXNTBaV3dnVTBkWUlGQkQKU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVgpCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNWERUSXpNRFV4Ck16SXhNREF3TTFvWERUSXpNRFl4TWpJeE1EQXdNMW93Z2drME1ETUNGRy9EVGxBajV5aVNORFhXR3FTNFBHR0IKWnEwMUZ3MHlNekExTVRNeU1UQXdNRE5hTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQU8rdWJwY1YvS0U3aCtNego2Q1llMXRtUXFTYXRGdzB5TXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TkFJVkFQMWdoa2hpCm5McHpCNHROU1M5TFBxZEJyUWpORncweU16QTFNVE15TVRBd01ETmFNQXd3Q2dZRFZSMFZCQU1LQVFFd05BSVYKQUlyNUpCaE9IVnI5M1hQRDFqb1M5ZWkxYzM1V0Z3MHlNekExTVRNeU1UQXdNRE5hTUF3d0NnWURWUjBWQkFNSwpBUUV3TkFJVkFMRWxlWGpQcWN6ZEIxbXIrTVhLY3ZyanA0cWJGdzB5TXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEClZSMFZCQU1LQVFFd013SVVkUDZtRktseXZnNG9RL0lGbURXQkh0aHkrYk1YRFRJek1EVXhNekl4TURBd00xb3cKRERBS0JnTlZIUlVFQXdvQkFUQTBBaFVBK2NUdlZyT3JTTlYzNFFpNjdmUy9pQUZDRkxrWERUSXpNRFV4TXpJeApNREF3TTFvd0REQUtCZ05WSFJVRUF3b0JBVEF6QWhRSEhlQjNqNTVmeFBLSGp6RFdzSHlhTU9hekN4Y05Nak13Ck5URXpNakV3TURBeldqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRRE40a0pQbHl6cWxQOGptVGYwMkF3bEFwM1cKQ3hjTk1qTXdOVEV6TWpFd01EQXpXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUNGR3d6R2VVUW0yUlFmVHp4RXl6ZwpBMG52VW5NWkZ3MHlNekExTVRNeU1UQXdNRE5hTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQU44STExYTJhblNYCjlEdGJ0WXJhQk5QMDk2azNGdzB5TXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVUtLOUkKVzJ6MmZrQ2FPZFhMV3U1Rm1QZW8rbnNYRFRJek1EVXhNekl4TURBd00xb3dEREFLQmdOVkhSVUVBd29CQVRBMApBaFVBKzRzdHJzQ1N5dHFLcWJ4UDh2SENEUU5HWm93WERUSXpNRFV4TXpJeE1EQXdNMW93RERBS0JnTlZIUlVFCkF3b0JBVEEwQWhVQXpVaFFyRks5ekdtbXB2Qll5THhYdTlDMStHUVhEVEl6TURVeE16SXhNREF3TTFvd0REQUsKQmdOVkhSVUVBd29CQVRBMEFoVUFtVTNUWm05U2RmdUFYNVhkQXIxUXl5WjUySzBYRFRJek1EVXhNekl4TURBdwpNMW93RERBS0JnTlZIUlVFQXdvQkFUQXpBaFFIQWhOcEFDVWlkTmtEWHUzMVJYUmkrdER2VEJjTk1qTXdOVEV6Ck1qRXdNREF6V2pBTU1Bb0dBMVVkRlFRRENnRUJNRE1DRkdIeXYzUGptMDRFcWlmWUFiMXowa01adGIrQUZ3MHkKTXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVU9aSytoUnVXa0M3L09KV2ViQzcvR3daUgpwTFVYRFRJek1EVXhNekl4TURBd00xb3dEREFLQmdOVkhSVUVBd29CQVRBekFoUmpueE9hVUVEOXovR1I2S1Q3CkcvQ0c3V0E1Y1JjTk1qTXdOVEV6TWpFd01EQXpXakFNTUFvR0ExVWRGUVFEQ2dFQk1EUUNGUUNWblZNL2trbmMKSGxFMVJNM0lNTDhadC9IekFSY05Nak13TlRFek1qRXdNREF6V2pBTU1Bb0dBMVVkRlFRRENnRUJNRE1DRkEvYQpRNkFMYU9wNXQ4TGVycXdMU1l2ZnNxK1FGdzB5TXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3Ck5BSVZBSjFuZFR1QjVIQ1FycWRqKyt4TVJVbTgyNWt6RncweU16QTFNVE15TVRBd01ETmFNQXd3Q2dZRFZSMFYKQkFNS0FRRXdNd0lVTkwrN2VoMmNWb0ZINFJpMkZQZTNidFB2YU44WERUSXpNRFV4TXpJeE1EQXdNMW93RERBSwpCZ05WSFJVRUF3b0JBVEEwQWhVQWhkUEpPQnQzcCtCTkVaeWVXdFowbi9QL3E0Y1hEVEl6TURVeE16SXhNREF3Ck0xb3dEREFLQmdOVkhSVUVBd29CQVRBMEFoVUFrNGg4cEVFZWVwSTcwZjdTZ1pzcFNmSUJ0YlFYRFRJek1EVXgKTXpJeE1EQXdNMW93RERBS0JnTlZIUlVFQXdvQkFUQXpBaFFrbU54aWc1TUpsdjJMOGpvM3JMNG1vNzdVVnhjTgpNak13TlRFek1qRXdNREF6V2pBTU1Bb0dBMVVkRlFRRENnRUJNRFFDRlFDS1p2R25TVWlHWjJpY3c1QTZ4VXhtCkszRXVjeGNOTWpNd05URXpNakV3TURBeldqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRQ3Z3VFlRdmROc3Q1aGQKRUdTQnFJRFRvQi9hQnhjTk1qTXdOVEV6TWpFd01EQXpXakFNTUFvR0ExVWRGUVFEQ2dFQk1EUUNGUUR2NEVzcwpNOUEycXNsc3BuTy9IcHBIdGsxY3V4Y05Nak13TlRFek1qRXdNREF6V2pBTU1Bb0dBMVVkRlFRRENnRUJNRFFDCkZRQ0QyYXlOaTdVSjBjYklDYTF4TG9Rd1ZaN1g4eGNOTWpNd05URXpNakV3TURBeldqQU1NQW9HQTFVZEZRUUQKQ2dFQk1ETUNGSGt4L1ZDMUJ4d2J2OFczdHQ3WXRGdWRpNFVwRncweU16QTFNVE15TVRBd01ETmFNQXd3Q2dZRApWUjBWQkFNS0FRRXdNd0lVSDZJT0tYQzk1ZFYvZTQzZmd6bElUaDhkQ0NNWERUSXpNRFV4TXpJeE1EQXdNMW93CkREQUtCZ05WSFJVRUF3b0JBVEF6QWhRZWg3TERzeTJOSStRUnp2TkJsN2xhOE1pdDlSY05Nak13TlRFek1qRXcKTURBeldqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRQ2EvUzdwQ2tjMVVLRm4yWmFSRkRmSFVDMGZDUmNOTWpNdwpOVEV6TWpFd01EQXpXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUNGRVNCc1BFWEtLRTdhVzArcWNkd29MRmV4WTNhCkZ3MHlNekExTVRNeU1UQXdNRE5hTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQUtlRm4xZVlMdkRtZlRlOGp2THYKV3NnMS94cXBGdzB5TXpBMU1UTXlNVEF3TUROYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVWV1TjNTS241RXZURwpPNmVyQjhXVHpoMGRFWUVYRFRJek1EVXhNekl4TURBd00xb3dEREFLQmdOVkhSVUVBd29CQVRBekFoUVRpRXN6CkpwazR3WldxRncvS2Rkb1hkVGpmQ3hjTk1qTXdOVEV6TWpFd01EQXpXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUMKRkN3OHh2NlNlZHNWRnRYT09mS29tTTJsb1hYaEZ3MHlNekExTVRNeU1UQXdNRE5hTUF3d0NnWURWUjBWQkFNSwpBUUV3TXdJVWNYbElhSFVKSTB2cGVlUzMzT2J6Rys5a3Rvd1hEVEl6TURVeE16SXhNREF3TTFvd0REQUtCZ05WCkhSVUVBd29CQVRBMEFoVUFuWGJ2TERuQk51aGxpMjV6bHJIWFJGb25ZeDhYRFRJek1EVXhNekl4TURBd00xb3cKRERBS0JnTlZIUlVFQXdvQkFUQTBBaFVBdytBbC9LbVY4MjladElSbms1NCtOT1kyR204WERUSXpNRFV4TXpJeApNREF3TTFvd0REQUtCZ05WSFJVRUF3b0JBVEEwQWhVQWpGOXJNbGZhQmJGMEtlTG1HNmxsMW5Nd1lHb1hEVEl6Ck1EVXhNekl4TURBd00xb3dEREFLQmdOVkhSVUVBd29CQVRBMEFoVUFvWHhSY2k3QjRNTW5qK2k5OEZJRm5MN0UKNWtnWERUSXpNRFV4TXpJeE1EQXdNMW93RERBS0JnTlZIUlVFQXdvQkFhQXZNQzB3Q2dZRFZSMFVCQU1DQVFFdwpId1lEVlIwakJCZ3dGb0FVbFc5ZHpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0NnWUlLb1pJemowRUF3SURSd0F3ClJBSWdGQ2NFeGhjOW11WkNKeWJFZ2FEdGdIMVpGNXM3MzlJSFRqWGwvSlpURFI0Q0lHNVdlTGNGQ2cyblpvelAKNU5xQzArTWVjbVl4UE4wZXViUGJwemhzRjI4egotLS0tLUVORCBYNTA5IENSTC0tLS0tCgA=","tcb_info_issuer_chain":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpekNDQWpLZ0F3SUJBZ0lVZmppQzFmdFZLVXBBU1k1RmhBUHBGSkc5OUZVd0NnWUlLb1pJemowRUF3SXcKYURFYU1CZ0dBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdgpjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKCkJnTlZCQVlUQWxWVE1CNFhEVEU0TURVeU1URXdOVEF4TUZvWERUSTFNRFV5TVRFd05UQXhNRm93YkRFZU1Cd0cKQTFVRUF3d1ZTVzUwWld3Z1UwZFlJRlJEUWlCVGFXZHVhVzVuTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JEYjNKdwpiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3dDUVlEClZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVORkc4eHp5ZFdSZks5MmJtR3YKUCttQWg5MVBFeVY3Smg2RkdKZDVuZEU5YUJIN1IzRTRBN3VicmxoL3pOM0M0eHZwb291R2xpck1iYStXMmxqdQp5cGFqZ2JVd2diSXdId1lEVlIwakJCZ3dGb0FVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3d1VnWURWUjBmCkJFc3dTVEJIb0VXZ1E0WkJhSFIwY0hNNkx5OWpaWEowYVdacFkyRjBaWE11ZEhKMWMzUmxaSE5sY25acFkyVnoKTG1sdWRHVnNMbU52YlM5SmJuUmxiRk5IV0ZKdmIzUkRRUzVrWlhJd0hRWURWUjBPQkJZRUZINDRndFg3VlNsSwpRRW1PUllRRDZSU1J2ZlJWTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQjlDOHdPQU4vSW14RHRHQUNWMjQ2S2NxamFnWk9SMGt5Y3R5QnJzR0dKVkFpQWoKZnRick5Hc0dVOFlIMjExZFJpWU5vUFB1MTlacC96ZThKbWh1akIwb0J3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA","tcb_info":"eyJ0Y2JJbmZvIjp7ImlkIjoiU0dYIiwidmVyc2lvbiI6MywiaXNzdWVEYXRlIjoiMjAyMy0wNS0xNVQxNDowODoxMVoiLCJuZXh0VXBkYXRlIjoiMjAyMy0wNi0xNFQxNDowODoxMVoiLCJmbXNwYyI6IjAwNjA2YTAwMDAwMCIsInBjZUlkIjoiMDAwMCIsInRjYlR5cGUiOjAsInRjYkV2YWx1YXRpb25EYXRhTnVtYmVyIjoxNSwidGNiTGV2ZWxzIjpbeyJ0Y2IiOnsic2d4dGNiY29tcG9uZW50cyI6W3sic3ZuIjoxMSwiY2F0ZWdvcnkiOiJCSU9TIiwidHlwZSI6IkVhcmx5IE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6MTEsImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlNHWCBMYXRlIE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6MywiY2F0ZWdvcnkiOiJPUy9WTU0iLCJ0eXBlIjoiVFhUIFNJTklUIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiQklPUyJ9LHsic3ZuIjoyNTV9LHsic3ZuIjoyNTV9LHsic3ZuIjoxfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfV0sInBjZXN2biI6MTN9LCJ0Y2JEYXRlIjoiMjAyMy0wMi0xNVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJTV0hhcmRlbmluZ05lZWRlZCIsImFkdmlzb3J5SURzIjpbIklOVEVMLVNBLTAwNjE1Il19LHsidGNiIjp7InNneHRjYmNvbXBvbmVudHMiOlt7InN2biI6MTEsImNhdGVnb3J5IjoiQklPUyIsInR5cGUiOiJFYXJseSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjExLCJjYXRlZ29yeSI6Ik9TL1ZNTSIsInR5cGUiOiJTR1ggTGF0ZSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlRYVCBTSU5JVCJ9LHsic3ZuIjozLCJjYXRlZ29yeSI6IkJJT1MifSx7InN2biI6MjU1fSx7InN2biI6MjU1fSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH1dLCJwY2Vzdm4iOjEzfSwidGNiRGF0ZSI6IjIwMjMtMDItMTVUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiQ29uZmlndXJhdGlvbkFuZFNXSGFyZGVuaW5nTmVlZGVkIiwiYWR2aXNvcnlJRHMiOlsiSU5URUwtU0EtMDA2MTUiXX0seyJ0Y2IiOnsic2d4dGNiY29tcG9uZW50cyI6W3sic3ZuIjo3LCJjYXRlZ29yeSI6IkJJT1MiLCJ0eXBlIjoiRWFybHkgTWljcm9jb2RlIFVwZGF0ZSJ9LHsic3ZuIjo5LCJjYXRlZ29yeSI6Ik9TL1ZNTSIsInR5cGUiOiJTR1ggTGF0ZSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlRYVCBTSU5JVCJ9LHsic3ZuIjozLCJjYXRlZ29yeSI6IkJJT1MifSx7InN2biI6MjU1fSx7InN2biI6MjU1fSx7InN2biI6MX0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH1dLCJwY2Vzdm4iOjEzfSwidGNiRGF0ZSI6IjIwMjItMDgtMTBUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiT3V0T2ZEYXRlIiwiYWR2aXNvcnlJRHMiOlsiSU5URUwtU0EtMDA2NTciLCJJTlRFTC1TQS0wMDczMCIsIklOVEVMLVNBLTAwNzM4IiwiSU5URUwtU0EtMDA3NjciLCJJTlRFTC1TQS0wMDYxNSJdfSx7InRjYiI6eyJzZ3h0Y2Jjb21wb25lbnRzIjpbeyJzdm4iOjcsImNhdGVnb3J5IjoiQklPUyIsInR5cGUiOiJFYXJseSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjksImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlNHWCBMYXRlIE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6MywiY2F0ZWdvcnkiOiJPUy9WTU0iLCJ0eXBlIjoiVFhUIFNJTklUIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiQklPUyJ9LHsic3ZuIjoyNTV9LHsic3ZuIjoyNTV9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfV0sInBjZXN2biI6MTN9LCJ0Y2JEYXRlIjoiMjAyMi0wOC0xMFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGVDb25maWd1cmF0aW9uTmVlZGVkIiwiYWR2aXNvcnlJRHMiOlsiSU5URUwtU0EtMDA2NTciLCJJTlRFTC1TQS0wMDczMCIsIklOVEVMLVNBLTAwNzM4IiwiSU5URUwtU0EtMDA3NjciLCJJTlRFTC1TQS0wMDYxNSJdfSx7InRjYiI6eyJzZ3h0Y2Jjb21wb25lbnRzIjpbeyJzdm4iOjQsImNhdGVnb3J5IjoiQklPUyIsInR5cGUiOiJFYXJseSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjQsImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlNHWCBMYXRlIE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6MywiY2F0ZWdvcnkiOiJPUy9WTU0iLCJ0eXBlIjoiVFhUIFNJTklUIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiQklPUyJ9LHsic3ZuIjoyNTV9LHsic3ZuIjoyNTV9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfV0sInBjZXN2biI6MTF9LCJ0Y2JEYXRlIjoiMjAyMS0xMS0xMFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUiLCJhZHZpc29yeUlEcyI6WyJJTlRFTC1TQS0wMDU4NiIsIklOVEVMLVNBLTAwNjE0IiwiSU5URUwtU0EtMDA2MTUiLCJJTlRFTC1TQS0wMDY1NyIsIklOVEVMLVNBLTAwNzMwIiwiSU5URUwtU0EtMDA3MzgiLCJJTlRFTC1TQS0wMDc2NyJdfSx7InRjYiI6eyJzZ3h0Y2Jjb21wb25lbnRzIjpbeyJzdm4iOjQsImNhdGVnb3J5IjoiQklPUyIsInR5cGUiOiJFYXJseSBNaWNyb2NvZGUgVXBkYXRlIn0seyJzdm4iOjQsImNhdGVnb3J5IjoiT1MvVk1NIiwidHlwZSI6IlNHWCBMYXRlIE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6MywiY2F0ZWdvcnkiOiJPUy9WTU0iLCJ0eXBlIjoiVFhUIFNJTklUIn0seyJzdm4iOjMsImNhdGVnb3J5IjoiQklPUyJ9LHsic3ZuIjoyNTV9LHsic3ZuIjoyNTV9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfV0sInBjZXN2biI6MTB9LCJ0Y2JEYXRlIjoiMjAyMC0xMS0xMVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUiLCJhZHZpc29yeUlEcyI6WyJJTlRFTC1TQS0wMDQ3NyIsIklOVEVMLVNBLTAwNTg2IiwiSU5URUwtU0EtMDA2MTQiLCJJTlRFTC1TQS0wMDYxNSIsIklOVEVMLVNBLTAwNjU3IiwiSU5URUwtU0EtMDA3MzAiLCJJTlRFTC1TQS0wMDczOCIsIklOVEVMLVNBLTAwNzY3Il19LHsidGNiIjp7InNneHRjYmNvbXBvbmVudHMiOlt7InN2biI6NCwiY2F0ZWdvcnkiOiJCSU9TIiwidHlwZSI6IkVhcmx5IE1pY3JvY29kZSBVcGRhdGUifSx7InN2biI6NCwiY2F0ZWdvcnkiOiJPUy9WTU0iLCJ0eXBlIjoiU0dYIExhdGUgTWljcm9jb2RlIFVwZGF0ZSJ9LHsic3ZuIjozLCJjYXRlZ29yeSI6Ik9TL1ZNTSIsInR5cGUiOiJUWFQgU0lOSVQifSx7InN2biI6MywiY2F0ZWdvcnkiOiJCSU9TIn0seyJzdm4iOjI1NX0seyJzdm4iOjI1NX0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9LHsic3ZuIjowfSx7InN2biI6MH0seyJzdm4iOjB9XSwicGNlc3ZuIjo1fSwidGNiRGF0ZSI6IjIwMTgtMDEtMDRUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiT3V0T2ZEYXRlIiwiYWR2aXNvcnlJRHMiOlsiSU5URUwtU0EtMDAxMDYiLCJJTlRFTC1TQS0wMDExNSIsIklOVEVMLVNBLTAwMTM1IiwiSU5URUwtU0EtMDAyMDMiLCJJTlRFTC1TQS0wMDIyMCIsIklOVEVMLVNBLTAwMjMzIiwiSU5URUwtU0EtMDAyNzAiLCJJTlRFTC1TQS0wMDI5MyIsIklOVEVMLVNBLTAwMzIwIiwiSU5URUwtU0EtMDAzMjkiLCJJTlRFTC1TQS0wMDM4MSIsIklOVEVMLVNBLTAwMzg5IiwiSU5URUwtU0EtMDA0NzciLCJJTlRFTC1TQS0wMDU4NiIsIklOVEVMLVNBLTAwNjE0IiwiSU5URUwtU0EtMDA2MTUiLCJJTlRFTC1TQS0wMDY1NyIsIklOVEVMLVNBLTAwNzMwIiwiSU5URUwtU0EtMDA3MzgiLCJJTlRFTC1TQS0wMDc2NyJdfV19LCJzaWduYXR1cmUiOiI1ZmVlNzU2ODQ3MThiY2I5MTkxMzEyY2QzYmY0NzA5NmE0MDY4ZjQ1MGQyZWM5ZTA1YjhjZDVhM2E3Y2I2MWIyOTI2MTJhNzA4YzRjNWEzMDQ4MzZjODJjM2E3MTkxNDQ3ZTNiYTY5MWU1OTI4N2NjOWM4OTQzZTgyMTczNGQ0MSJ9AA==","qe_identity_issuer_chain":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpekNDQWpLZ0F3SUJBZ0lVZmppQzFmdFZLVXBBU1k1RmhBUHBGSkc5OUZVd0NnWUlLb1pJemowRUF3SXcKYURFYU1CZ0dBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdgpjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKCkJnTlZCQVlUQWxWVE1CNFhEVEU0TURVeU1URXdOVEF4TUZvWERUSTFNRFV5TVRFd05UQXhNRm93YkRFZU1Cd0cKQTFVRUF3d1ZTVzUwWld3Z1UwZFlJRlJEUWlCVGFXZHVhVzVuTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JEYjNKdwpiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3dDUVlEClZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVORkc4eHp5ZFdSZks5MmJtR3YKUCttQWg5MVBFeVY3Smg2RkdKZDVuZEU5YUJIN1IzRTRBN3VicmxoL3pOM0M0eHZwb291R2xpck1iYStXMmxqdQp5cGFqZ2JVd2diSXdId1lEVlIwakJCZ3dGb0FVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3d1VnWURWUjBmCkJFc3dTVEJIb0VXZ1E0WkJhSFIwY0hNNkx5OWpaWEowYVdacFkyRjBaWE11ZEhKMWMzUmxaSE5sY25acFkyVnoKTG1sdWRHVnNMbU52YlM5SmJuUmxiRk5IV0ZKdmIzUkRRUzVrWlhJd0hRWURWUjBPQkJZRUZINDRndFg3VlNsSwpRRW1PUllRRDZSU1J2ZlJWTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQjlDOHdPQU4vSW14RHRHQUNWMjQ2S2NxamFnWk9SMGt5Y3R5QnJzR0dKVkFpQWoKZnRick5Hc0dVOFlIMjExZFJpWU5vUFB1MTlacC96ZThKbWh1akIwb0J3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA","qe_identity":"eyJlbmNsYXZlSWRlbnRpdHkiOnsiaWQiOiJRRSIsInZlcnNpb24iOjIsImlzc3VlRGF0ZSI6IjIwMjMtMDUtMTVUMTQ6NDg6NDBaIiwibmV4dFVwZGF0ZSI6IjIwMjMtMDYtMTRUMTQ6NDg6NDBaIiwidGNiRXZhbHVhdGlvbkRhdGFOdW1iZXIiOjE1LCJtaXNjc2VsZWN0IjoiMDAwMDAwMDAiLCJtaXNjc2VsZWN0TWFzayI6IkZGRkZGRkZGIiwiYXR0cmlidXRlcyI6IjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiYXR0cmlidXRlc01hc2siOiJGQkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMCIsIm1yc2lnbmVyIjoiOEM0RjU3NzVENzk2NTAzRTk2MTM3Rjc3QzY4QTgyOUEwMDU2QUM4REVENzAxNDBCMDgxQjA5NDQ5MEM1N0JGRiIsImlzdnByb2RpZCI6MSwidGNiTGV2ZWxzIjpbeyJ0Y2IiOnsiaXN2c3ZuIjo4fSwidGNiRGF0ZSI6IjIwMjMtMDItMTVUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiVXBUb0RhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjZ9LCJ0Y2JEYXRlIjoiMjAyMS0xMS0xMFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUiLCJhZHZpc29yeUlEcyI6WyJJTlRFTC1TQS0wMDYxNSJdfSx7InRjYiI6eyJpc3Zzdm4iOjV9LCJ0Y2JEYXRlIjoiMjAyMC0xMS0xMVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUiLCJhZHZpc29yeUlEcyI6WyJJTlRFTC1TQS0wMDQ3NyIsIklOVEVMLVNBLTAwNjE1Il19LHsidGNiIjp7ImlzdnN2biI6NH0sInRjYkRhdGUiOiIyMDE5LTExLTEzVDAwOjAwOjAwWiIsInRjYlN0YXR1cyI6Ik91dE9mRGF0ZSIsImFkdmlzb3J5SURzIjpbIklOVEVMLVNBLTAwMzM0IiwiSU5URUwtU0EtMDA0NzciLCJJTlRFTC1TQS0wMDYxNSJdfSx7InRjYiI6eyJpc3Zzdm4iOjJ9LCJ0Y2JEYXRlIjoiMjAxOS0wNS0xNVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUiLCJhZHZpc29yeUlEcyI6WyJJTlRFTC1TQS0wMDIxOSIsIklOVEVMLVNBLTAwMjkzIiwiSU5URUwtU0EtMDAzMzQiLCJJTlRFTC1TQS0wMDQ3NyIsIklOVEVMLVNBLTAwNjE1Il19LHsidGNiIjp7ImlzdnN2biI6MX0sInRjYkRhdGUiOiIyMDE4LTA4LTE1VDAwOjAwOjAwWiIsInRjYlN0YXR1cyI6Ik91dE9mRGF0ZSIsImFkdmlzb3J5SURzIjpbIklOVEVMLVNBLTAwMjAyIiwiSU5URUwtU0EtMDAyMTkiLCJJTlRFTC1TQS0wMDI5MyIsIklOVEVMLVNBLTAwMzM0IiwiSU5URUwtU0EtMDA0NzciLCJJTlRFTC1TQS0wMDYxNSJdfV19LCJzaWduYXR1cmUiOiI5N2ZmODk1Nzk3NWI0MGFhNTFhMTc3NjVkNzM0MzYzYjhjYjc1NTdlNjY1N2IwNGY2M2I2N2MwNWYyODg2YmUxYjdjYzE0YjljMWI4ODllMDNiODU4NjZlMjc3YTEwMmViOWZiODUwMjliNzAwOGI0MTc1NGNkYmEwMTRhNWE4YyJ9AA=="}`) + var collateral TeeQvCollateral + err := json.Unmarshal(jsonCollateralBlob, &collateral) + req.Nil(err) + t.Log("Collateral: " + string(jsonCollateralBlob)) + + var jsonQuoteBlob = []byte(`{"version":[3,0],"key_type":[2,0],"reserved":[0,0,0,0],"qe_svn":[9,0],"pce_svn":[14,0],"qe_vendor_id":[147,154,114,51,247,156,76,169,148,10,13,179,149,127,6,7],"user_data":[96,61,1,77,110,199,12,105,18,177,33,134,118,220,150,214,0,0,0,0],"report_body":{"cpusvn":[11,11,16,15,255,255,1,0,0,0,0,0,0,0,0,0],"miscselect":[1,0,0,0],"reserved1":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"features":[5,0,0,0,0,0,0,0],"xfrm":[231,0,0,0,0,0,0,0],"mrenclave":[24,148,107,53,71,211,202,3,111,77,247,181,22,133,126,40,253,81,45,105,254,211,65,29,198,96,83,121,18,250,171,248],"reserved2":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"mrsigner":[41,128,55,216,135,130,224,34,224,25,179,2,7,69,183,138,164,14,217,92,119,218,75,247,243,37,61,58,68,196,253,126],"reserved3":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"isv_prodid":[0,0],"isv_svn":[0,0],"reserved4":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reportdata":[153,123,250,226,215,249,8,157,23,107,24,181,206,242,216,29,236,31,209,220,51,46,155,35,197,83,196,224,47,227,228,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}`) + var expectedQuote Quote + err = json.Unmarshal(jsonQuoteBlob, &expectedQuote) + req.Nil(err) + t.Log("MrSigner: " + hex.EncodeToString(expectedQuote.ReportBody.MrSigner[:])) + t.Log("MrEnclave: " + hex.EncodeToString(expectedQuote.ReportBody.MrEnclave[:])) + + result, err := SgxVerifyRemoteReportCollateral(quote, collateral, expirationCheckDate) + req.Nil(err) + req.Equal(SgxQlQvResultSwHardeningNeeded, result.VerificationResult) + req.False(result.CollateralExpired) + req.Equal(expectedExpirationDate, result.EarliestExpirationDate) + req.Equal(expectedQuote, result.Quote) + + result, err = SgxVerifyRemoteReportCollateral(quote, collateral, expectedExpirationDate) + req.Nil(err) + req.Equal(SgxQlQvResultSwHardeningNeeded, result.VerificationResult) + req.True(result.CollateralExpired) + req.Equal(expectedExpirationDate, result.EarliestExpirationDate) + req.Equal(expectedQuote, result.Quote) +} + +func TestVerifyRemoteReportCollateralOutDated(t *testing.T) { + var req = require.New(t) + + var quote = []byte{ + 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x0e, 0x00, 0x93, 0x9a, + 0x72, 0x33, 0xf7, 0x9c, 0x4c, 0xa9, 0x94, 0x0a, 0x0d, 0xb3, 0x95, 0x7f, 0x06, 0x07, + 0x46, 0x72, 0x07, 0x77, 0x7b, 0x2a, 0x56, 0xdf, 0xa2, 0xb1, 0x0e, 0xdd, 0x20, 0x16, + 0x0d, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb1, 0xab, 0x35, 0x6e, 0xa0, 0x6e, 0x53, 0x25, 0xae, 0x16, 0x7d, 0x29, 0x0b, 0x3a, + 0x66, 0xb6, 0x1b, 0x89, 0x79, 0xd1, 0x2e, 0x6b, 0xbd, 0x5a, 0x97, 0xf3, 0x85, 0x72, + 0xc0, 0x32, 0x38, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x80, 0x37, 0xd8, 0x87, 0x82, + 0xe0, 0x22, 0xe0, 0x19, 0xb3, 0x02, 0x07, 0x45, 0xb7, 0x8a, 0xa4, 0x0e, 0xd9, 0x5c, + 0x77, 0xda, 0x4b, 0xf7, 0xf3, 0x25, 0x3d, 0x3a, 0x44, 0xc4, 0xfd, 0x7e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x44, 0x10, + 0x00, 0x00, 0xb6, 0xdc, 0x93, 0xed, 0xc9, 0x25, 0x9d, 0x21, 0x6b, 0x17, 0xe4, 0xfa, + 0x00, 0x68, 0x21, 0x80, 0x5a, 0x8e, 0xbd, 0x81, 0x9a, 0x39, 0xc5, 0xb0, 0xb1, 0xbd, + 0x0b, 0xfc, 0x4b, 0x4b, 0xe3, 0x5c, 0x7a, 0x44, 0x46, 0xe1, 0x5a, 0xc6, 0xb1, 0x2e, + 0x8c, 0xee, 0x58, 0xce, 0x09, 0x3c, 0xed, 0xe6, 0xe5, 0xdc, 0x2c, 0xbe, 0xef, 0xbe, + 0xee, 0x21, 0x96, 0xd6, 0xa3, 0x6e, 0x4f, 0x7c, 0xc8, 0x21, 0xdc, 0x8c, 0x78, 0xda, + 0x8c, 0x50, 0xe0, 0xb3, 0x86, 0xa1, 0x4d, 0x55, 0x96, 0x93, 0xb2, 0xc7, 0xf7, 0x97, + 0xe9, 0x75, 0x5f, 0xc7, 0x22, 0xdd, 0x23, 0xe7, 0xab, 0x8c, 0x97, 0xe9, 0xe9, 0x1d, + 0xa5, 0x1a, 0x02, 0xe8, 0x23, 0xf7, 0xbe, 0x88, 0xa0, 0x8b, 0x1a, 0x6b, 0xdc, 0x58, + 0x44, 0xa0, 0xaf, 0x68, 0xdc, 0x16, 0xb0, 0x8c, 0xe5, 0x3a, 0x53, 0xb2, 0xba, 0xf1, + 0x36, 0xd1, 0x4f, 0x7d, 0x0b, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x2a, + 0xa5, 0x0c, 0xe1, 0xc0, 0xce, 0xf0, 0x3c, 0xcf, 0x89, 0xe7, 0xb5, 0xb1, 0x6b, 0x0d, + 0x79, 0x78, 0xf5, 0xc2, 0xb1, 0xed, 0xcf, 0x77, 0x4d, 0x87, 0x70, 0x2e, 0x81, 0x54, + 0xd8, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x4f, 0x57, 0x75, 0xd7, 0x96, 0x50, 0x3e, + 0x96, 0x13, 0x7f, 0x77, 0xc6, 0x8a, 0x82, 0x9a, 0x00, 0x56, 0xac, 0x8d, 0xed, 0x70, + 0x14, 0x0b, 0x08, 0x1b, 0x09, 0x44, 0x90, 0xc5, 0x7b, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4b, 0xba, 0x65, 0x76, 0x56, 0xb9, 0xb1, 0x19, 0x79, 0xbd, 0x5c, 0x8e, + 0xf7, 0x68, 0x82, 0xf7, 0x54, 0x82, 0x12, 0xf6, 0x85, 0xa2, 0x37, 0x65, 0x04, 0x3f, + 0x46, 0x54, 0x3e, 0x64, 0x18, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xd6, 0xbf, 0x3d, + 0x17, 0x99, 0x41, 0xbb, 0xf2, 0xd1, 0x94, 0xd7, 0xce, 0x30, 0xa0, 0xaa, 0xf9, 0x4e, + 0x8f, 0xe3, 0x46, 0xb6, 0xd8, 0x07, 0x7e, 0x6a, 0x06, 0xcb, 0x80, 0x15, 0x3f, 0xd1, + 0x00, 0xcc, 0x6c, 0x46, 0xd2, 0xd0, 0x2c, 0x02, 0x8d, 0xd9, 0x2c, 0x7d, 0x95, 0xff, + 0x13, 0x10, 0xed, 0xf8, 0x69, 0x00, 0xc8, 0x9c, 0x67, 0x68, 0x59, 0xbe, 0xc6, 0xfa, + 0x1e, 0x79, 0x74, 0x50, 0x20, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x05, 0x00, 0xdc, 0x0d, + 0x00, 0x00, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, + 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, + 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x45, 0x6a, 0x44, 0x43, 0x43, 0x42, 0x44, 0x4b, 0x67, + 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x55, 0x57, 0x74, 0x46, 0x4d, 0x63, 0x4b, + 0x63, 0x64, 0x75, 0x30, 0x43, 0x37, 0x62, 0x39, 0x30, 0x65, 0x38, 0x32, 0x67, 0x46, + 0x2f, 0x4d, 0x36, 0x63, 0x56, 0x2b, 0x45, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4b, 0x6f, + 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x77, 0x0a, 0x63, 0x54, 0x45, + 0x6a, 0x4d, 0x43, 0x45, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x61, 0x53, + 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, 0x49, 0x46, 0x42, + 0x44, 0x53, 0x79, 0x42, 0x51, 0x63, 0x6d, 0x39, 0x6a, 0x5a, 0x58, 0x4e, 0x7a, 0x62, + 0x33, 0x49, 0x67, 0x51, 0x30, 0x45, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, 0x67, 0x4e, + 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x0a, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, + 0x49, 0x45, 0x4e, 0x76, 0x63, 0x6e, 0x42, 0x76, 0x63, 0x6d, 0x46, 0x30, 0x61, 0x57, + 0x39, 0x75, 0x4d, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, + 0x44, 0x41, 0x74, 0x54, 0x59, 0x57, 0x35, 0x30, 0x59, 0x53, 0x42, 0x44, 0x62, 0x47, + 0x46, 0x79, 0x59, 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, 0x31, 0x55, 0x45, + 0x0a, 0x43, 0x41, 0x77, 0x43, 0x51, 0x30, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x42, + 0x67, 0x4e, 0x56, 0x42, 0x41, 0x59, 0x54, 0x41, 0x6c, 0x56, 0x54, 0x4d, 0x42, 0x34, + 0x58, 0x44, 0x54, 0x49, 0x7a, 0x4d, 0x44, 0x55, 0x77, 0x4f, 0x54, 0x45, 0x79, 0x4e, + 0x44, 0x59, 0x78, 0x4e, 0x6c, 0x6f, 0x58, 0x44, 0x54, 0x4d, 0x77, 0x4d, 0x44, 0x55, + 0x77, 0x4f, 0x54, 0x45, 0x79, 0x4e, 0x44, 0x59, 0x78, 0x0a, 0x4e, 0x6c, 0x6f, 0x77, + 0x63, 0x44, 0x45, 0x69, 0x4d, 0x43, 0x41, 0x47, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, + 0x77, 0x5a, 0x53, 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, + 0x49, 0x46, 0x42, 0x44, 0x53, 0x79, 0x42, 0x44, 0x5a, 0x58, 0x4a, 0x30, 0x61, 0x57, + 0x5a, 0x70, 0x59, 0x32, 0x46, 0x30, 0x5a, 0x54, 0x45, 0x61, 0x4d, 0x42, 0x67, 0x47, + 0x41, 0x31, 0x55, 0x45, 0x0a, 0x43, 0x67, 0x77, 0x52, 0x53, 0x57, 0x35, 0x30, 0x5a, + 0x57, 0x77, 0x67, 0x51, 0x32, 0x39, 0x79, 0x63, 0x47, 0x39, 0x79, 0x59, 0x58, 0x52, + 0x70, 0x62, 0x32, 0x34, 0x78, 0x46, 0x44, 0x41, 0x53, 0x42, 0x67, 0x4e, 0x56, 0x42, + 0x41, 0x63, 0x4d, 0x43, 0x31, 0x4e, 0x68, 0x62, 0x6e, 0x52, 0x68, 0x49, 0x45, 0x4e, + 0x73, 0x59, 0x58, 0x4a, 0x68, 0x4d, 0x51, 0x73, 0x77, 0x43, 0x51, 0x59, 0x44, 0x0a, + 0x56, 0x51, 0x51, 0x49, 0x44, 0x41, 0x4a, 0x44, 0x51, 0x54, 0x45, 0x4c, 0x4d, 0x41, + 0x6b, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x68, 0x4d, 0x43, 0x56, 0x56, 0x4d, 0x77, + 0x57, 0x54, 0x41, 0x54, 0x42, 0x67, 0x63, 0x71, 0x68, 0x6b, 0x6a, 0x4f, 0x50, 0x51, + 0x49, 0x42, 0x42, 0x67, 0x67, 0x71, 0x68, 0x6b, 0x6a, 0x4f, 0x50, 0x51, 0x4d, 0x42, + 0x42, 0x77, 0x4e, 0x43, 0x41, 0x41, 0x51, 0x57, 0x0a, 0x49, 0x41, 0x6e, 0x45, 0x63, + 0x72, 0x51, 0x43, 0x78, 0x51, 0x48, 0x41, 0x77, 0x6d, 0x66, 0x43, 0x2f, 0x6d, 0x53, + 0x5a, 0x37, 0x33, 0x59, 0x4d, 0x31, 0x39, 0x45, 0x76, 0x43, 0x30, 0x2b, 0x62, 0x75, + 0x51, 0x6c, 0x35, 0x6e, 0x65, 0x6a, 0x65, 0x64, 0x77, 0x36, 0x6c, 0x6d, 0x62, 0x5a, + 0x55, 0x31, 0x4e, 0x45, 0x39, 0x5a, 0x55, 0x52, 0x48, 0x4d, 0x31, 0x57, 0x44, 0x44, + 0x4b, 0x72, 0x4e, 0x0a, 0x6d, 0x62, 0x35, 0x53, 0x7a, 0x6c, 0x79, 0x33, 0x46, 0x66, + 0x57, 0x79, 0x4f, 0x4a, 0x59, 0x67, 0x4f, 0x6b, 0x4e, 0x49, 0x6f, 0x34, 0x49, 0x43, + 0x70, 0x7a, 0x43, 0x43, 0x41, 0x71, 0x4d, 0x77, 0x48, 0x77, 0x59, 0x44, 0x56, 0x52, + 0x30, 0x6a, 0x42, 0x42, 0x67, 0x77, 0x46, 0x6f, 0x41, 0x55, 0x30, 0x4f, 0x69, 0x71, + 0x32, 0x6e, 0x58, 0x58, 0x2b, 0x53, 0x35, 0x4a, 0x46, 0x35, 0x67, 0x38, 0x0a, 0x65, + 0x78, 0x52, 0x6c, 0x30, 0x4e, 0x58, 0x79, 0x57, 0x55, 0x30, 0x77, 0x62, 0x41, 0x59, + 0x44, 0x56, 0x52, 0x30, 0x66, 0x42, 0x47, 0x55, 0x77, 0x59, 0x7a, 0x42, 0x68, 0x6f, + 0x46, 0x2b, 0x67, 0x58, 0x59, 0x5a, 0x62, 0x61, 0x48, 0x52, 0x30, 0x63, 0x48, 0x4d, + 0x36, 0x4c, 0x79, 0x39, 0x68, 0x63, 0x47, 0x6b, 0x75, 0x64, 0x48, 0x4a, 0x31, 0x63, + 0x33, 0x52, 0x6c, 0x5a, 0x48, 0x4e, 0x6c, 0x0a, 0x63, 0x6e, 0x5a, 0x70, 0x59, 0x32, + 0x56, 0x7a, 0x4c, 0x6d, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x4c, 0x6d, 0x4e, 0x76, + 0x62, 0x53, 0x39, 0x7a, 0x5a, 0x33, 0x67, 0x76, 0x59, 0x32, 0x56, 0x79, 0x64, 0x47, + 0x6c, 0x6d, 0x61, 0x57, 0x4e, 0x68, 0x64, 0x47, 0x6c, 0x76, 0x62, 0x69, 0x39, 0x32, + 0x4d, 0x79, 0x39, 0x77, 0x59, 0x32, 0x74, 0x6a, 0x63, 0x6d, 0x77, 0x2f, 0x59, 0x32, + 0x45, 0x39, 0x0a, 0x63, 0x48, 0x4a, 0x76, 0x59, 0x32, 0x56, 0x7a, 0x63, 0x32, 0x39, + 0x79, 0x4a, 0x6d, 0x56, 0x75, 0x59, 0x32, 0x39, 0x6b, 0x61, 0x57, 0x35, 0x6e, 0x50, + 0x57, 0x52, 0x6c, 0x63, 0x6a, 0x41, 0x64, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x51, 0x34, + 0x45, 0x46, 0x67, 0x51, 0x55, 0x77, 0x48, 0x49, 0x6e, 0x51, 0x41, 0x52, 0x6c, 0x67, + 0x30, 0x44, 0x4a, 0x51, 0x6c, 0x45, 0x46, 0x4b, 0x4d, 0x4e, 0x5a, 0x0a, 0x56, 0x53, + 0x4b, 0x62, 0x59, 0x42, 0x51, 0x77, 0x44, 0x67, 0x59, 0x44, 0x56, 0x52, 0x30, 0x50, + 0x41, 0x51, 0x48, 0x2f, 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, 0x62, 0x41, 0x4d, 0x41, + 0x77, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, 0x42, 0x2f, 0x77, 0x51, 0x43, + 0x4d, 0x41, 0x41, 0x77, 0x67, 0x67, 0x48, 0x54, 0x42, 0x67, 0x6b, 0x71, 0x68, 0x6b, + 0x69, 0x47, 0x2b, 0x45, 0x30, 0x42, 0x0a, 0x44, 0x51, 0x45, 0x45, 0x67, 0x67, 0x48, + 0x45, 0x4d, 0x49, 0x49, 0x42, 0x77, 0x44, 0x41, 0x65, 0x42, 0x67, 0x6f, 0x71, 0x68, + 0x6b, 0x69, 0x47, 0x2b, 0x45, 0x30, 0x42, 0x44, 0x51, 0x45, 0x42, 0x42, 0x42, 0x42, + 0x5a, 0x4c, 0x56, 0x4a, 0x69, 0x69, 0x5a, 0x4b, 0x39, 0x78, 0x4a, 0x33, 0x30, 0x41, + 0x33, 0x37, 0x6b, 0x72, 0x6b, 0x4a, 0x6b, 0x4d, 0x49, 0x49, 0x42, 0x59, 0x77, 0x59, + 0x4b, 0x0a, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, + 0x41, 0x6a, 0x43, 0x43, 0x41, 0x56, 0x4d, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, + 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x45, 0x43, + 0x41, 0x51, 0x6f, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, + 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x49, 0x43, 0x0a, 0x41, 0x51, 0x6f, + 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, + 0x51, 0x30, 0x42, 0x41, 0x67, 0x4d, 0x43, 0x41, 0x51, 0x49, 0x77, 0x45, 0x41, 0x59, + 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, + 0x67, 0x51, 0x43, 0x41, 0x51, 0x49, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, + 0x49, 0x68, 0x76, 0x68, 0x4e, 0x0a, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x55, 0x43, + 0x41, 0x51, 0x49, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, + 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x59, 0x43, 0x41, 0x51, 0x45, 0x77, + 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, + 0x30, 0x42, 0x41, 0x67, 0x63, 0x43, 0x41, 0x51, 0x51, 0x77, 0x45, 0x41, 0x59, 0x4c, + 0x0a, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, + 0x67, 0x67, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, + 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x6b, 0x43, 0x41, + 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, + 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x6f, 0x43, 0x0a, 0x41, 0x51, 0x41, 0x77, + 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, + 0x30, 0x42, 0x41, 0x67, 0x73, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, + 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, + 0x77, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, + 0x68, 0x76, 0x68, 0x4e, 0x0a, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x30, 0x43, 0x41, + 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, + 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x67, 0x34, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, + 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, + 0x42, 0x41, 0x67, 0x38, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x0a, + 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, + 0x41, 0x43, 0x41, 0x51, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, + 0x68, 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, 0x45, 0x43, 0x41, 0x51, + 0x73, 0x77, 0x48, 0x77, 0x59, 0x4c, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, + 0x41, 0x51, 0x30, 0x42, 0x41, 0x68, 0x49, 0x45, 0x0a, 0x45, 0x41, 0x6f, 0x4b, 0x41, + 0x67, 0x49, 0x43, 0x41, 0x51, 0x51, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x41, 0x41, 0x77, 0x45, 0x41, 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, + 0x76, 0x68, 0x4e, 0x41, 0x51, 0x30, 0x42, 0x41, 0x77, 0x51, 0x43, 0x41, 0x41, 0x41, + 0x77, 0x46, 0x41, 0x59, 0x4b, 0x4b, 0x6f, 0x5a, 0x49, 0x68, 0x76, 0x68, 0x4e, 0x41, + 0x51, 0x30, 0x42, 0x0a, 0x42, 0x41, 0x51, 0x47, 0x41, 0x48, 0x42, 0x75, 0x52, 0x77, + 0x41, 0x41, 0x4d, 0x41, 0x38, 0x47, 0x43, 0x69, 0x71, 0x47, 0x53, 0x49, 0x62, 0x34, + 0x54, 0x51, 0x45, 0x4e, 0x41, 0x51, 0x55, 0x4b, 0x41, 0x51, 0x41, 0x77, 0x43, 0x67, + 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x45, 0x41, 0x77, 0x49, 0x44, + 0x53, 0x41, 0x41, 0x77, 0x52, 0x51, 0x49, 0x67, 0x4b, 0x64, 0x36, 0x2b, 0x0a, 0x58, + 0x62, 0x4e, 0x42, 0x64, 0x66, 0x49, 0x73, 0x4f, 0x30, 0x4c, 0x56, 0x48, 0x45, 0x49, + 0x50, 0x75, 0x39, 0x49, 0x66, 0x4a, 0x52, 0x7a, 0x39, 0x70, 0x4f, 0x58, 0x73, 0x4f, + 0x74, 0x68, 0x78, 0x56, 0x4d, 0x59, 0x72, 0x58, 0x48, 0x49, 0x43, 0x49, 0x51, 0x44, + 0x5a, 0x71, 0x79, 0x6c, 0x61, 0x6f, 0x52, 0x36, 0x77, 0x5a, 0x76, 0x54, 0x48, 0x49, + 0x33, 0x51, 0x55, 0x59, 0x55, 0x7a, 0x6a, 0x0a, 0x77, 0x67, 0x62, 0x6b, 0x65, 0x35, + 0x77, 0x52, 0x48, 0x4c, 0x74, 0x6c, 0x31, 0x39, 0x34, 0x79, 0x53, 0x5a, 0x75, 0x4a, + 0x55, 0x41, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, + 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, + 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x6d, 0x44, 0x43, 0x43, 0x41, 0x6a, 0x36, + 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x56, 0x41, 0x4e, 0x44, 0x6f, 0x71, + 0x74, 0x70, 0x31, 0x31, 0x2f, 0x6b, 0x75, 0x53, 0x52, 0x65, 0x59, 0x50, 0x48, 0x73, + 0x55, 0x5a, 0x64, 0x44, 0x56, 0x38, 0x6c, 0x6c, 0x4e, 0x4d, 0x41, 0x6f, 0x47, 0x43, + 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x42, 0x41, 0x4d, 0x43, 0x0a, 0x4d, 0x47, + 0x67, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x4d, 0x4d, + 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x49, 0x46, 0x4e, 0x48, 0x57, 0x43, + 0x42, 0x53, 0x62, 0x32, 0x39, 0x30, 0x49, 0x45, 0x4e, 0x42, 0x4d, 0x52, 0x6f, 0x77, + 0x47, 0x41, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4b, 0x44, 0x42, 0x46, 0x4a, 0x62, 0x6e, + 0x52, 0x6c, 0x62, 0x43, 0x42, 0x44, 0x0a, 0x62, 0x33, 0x4a, 0x77, 0x62, 0x33, 0x4a, + 0x68, 0x64, 0x47, 0x6c, 0x76, 0x62, 0x6a, 0x45, 0x55, 0x4d, 0x42, 0x49, 0x47, 0x41, + 0x31, 0x55, 0x45, 0x42, 0x77, 0x77, 0x4c, 0x55, 0x32, 0x46, 0x75, 0x64, 0x47, 0x45, + 0x67, 0x51, 0x32, 0x78, 0x68, 0x63, 0x6d, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x42, + 0x67, 0x4e, 0x56, 0x42, 0x41, 0x67, 0x4d, 0x41, 0x6b, 0x4e, 0x42, 0x4d, 0x51, 0x73, + 0x77, 0x0a, 0x43, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x47, 0x45, 0x77, 0x4a, 0x56, + 0x55, 0x7a, 0x41, 0x65, 0x46, 0x77, 0x30, 0x78, 0x4f, 0x44, 0x41, 0x31, 0x4d, 0x6a, + 0x45, 0x78, 0x4d, 0x44, 0x55, 0x77, 0x4d, 0x54, 0x42, 0x61, 0x46, 0x77, 0x30, 0x7a, + 0x4d, 0x7a, 0x41, 0x31, 0x4d, 0x6a, 0x45, 0x78, 0x4d, 0x44, 0x55, 0x77, 0x4d, 0x54, + 0x42, 0x61, 0x4d, 0x48, 0x45, 0x78, 0x49, 0x7a, 0x41, 0x68, 0x0a, 0x42, 0x67, 0x4e, + 0x56, 0x42, 0x41, 0x4d, 0x4d, 0x47, 0x6b, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x49, + 0x46, 0x4e, 0x48, 0x57, 0x43, 0x42, 0x51, 0x51, 0x30, 0x73, 0x67, 0x55, 0x48, 0x4a, + 0x76, 0x59, 0x32, 0x56, 0x7a, 0x63, 0x32, 0x39, 0x79, 0x49, 0x45, 0x4e, 0x42, 0x4d, + 0x52, 0x6f, 0x77, 0x47, 0x41, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4b, 0x44, 0x42, 0x46, + 0x4a, 0x62, 0x6e, 0x52, 0x6c, 0x0a, 0x62, 0x43, 0x42, 0x44, 0x62, 0x33, 0x4a, 0x77, + 0x62, 0x33, 0x4a, 0x68, 0x64, 0x47, 0x6c, 0x76, 0x62, 0x6a, 0x45, 0x55, 0x4d, 0x42, + 0x49, 0x47, 0x41, 0x31, 0x55, 0x45, 0x42, 0x77, 0x77, 0x4c, 0x55, 0x32, 0x46, 0x75, + 0x64, 0x47, 0x45, 0x67, 0x51, 0x32, 0x78, 0x68, 0x63, 0x6d, 0x45, 0x78, 0x43, 0x7a, + 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x67, 0x4d, 0x41, 0x6b, 0x4e, 0x42, + 0x0a, 0x4d, 0x51, 0x73, 0x77, 0x43, 0x51, 0x59, 0x44, 0x56, 0x51, 0x51, 0x47, 0x45, + 0x77, 0x4a, 0x56, 0x55, 0x7a, 0x42, 0x5a, 0x4d, 0x42, 0x4d, 0x47, 0x42, 0x79, 0x71, + 0x47, 0x53, 0x4d, 0x34, 0x39, 0x41, 0x67, 0x45, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, + 0x4d, 0x34, 0x39, 0x41, 0x77, 0x45, 0x48, 0x41, 0x30, 0x49, 0x41, 0x42, 0x4c, 0x39, + 0x71, 0x2b, 0x4e, 0x4d, 0x70, 0x32, 0x49, 0x4f, 0x67, 0x0a, 0x74, 0x64, 0x6c, 0x31, + 0x62, 0x6b, 0x2f, 0x75, 0x57, 0x5a, 0x35, 0x2b, 0x54, 0x47, 0x51, 0x6d, 0x38, 0x61, + 0x43, 0x69, 0x38, 0x7a, 0x37, 0x38, 0x66, 0x73, 0x2b, 0x66, 0x4b, 0x43, 0x51, 0x33, + 0x64, 0x2b, 0x75, 0x44, 0x7a, 0x58, 0x6e, 0x56, 0x54, 0x41, 0x54, 0x32, 0x5a, 0x68, + 0x44, 0x43, 0x69, 0x66, 0x79, 0x49, 0x75, 0x4a, 0x77, 0x76, 0x4e, 0x33, 0x77, 0x4e, + 0x42, 0x70, 0x39, 0x69, 0x0a, 0x48, 0x42, 0x53, 0x53, 0x4d, 0x4a, 0x4d, 0x4a, 0x72, + 0x42, 0x4f, 0x6a, 0x67, 0x62, 0x73, 0x77, 0x67, 0x62, 0x67, 0x77, 0x48, 0x77, 0x59, + 0x44, 0x56, 0x52, 0x30, 0x6a, 0x42, 0x42, 0x67, 0x77, 0x46, 0x6f, 0x41, 0x55, 0x49, + 0x6d, 0x55, 0x4d, 0x31, 0x6c, 0x71, 0x64, 0x4e, 0x49, 0x6e, 0x7a, 0x67, 0x37, 0x53, + 0x56, 0x55, 0x72, 0x39, 0x51, 0x47, 0x7a, 0x6b, 0x6e, 0x42, 0x71, 0x77, 0x77, 0x0a, + 0x55, 0x67, 0x59, 0x44, 0x56, 0x52, 0x30, 0x66, 0x42, 0x45, 0x73, 0x77, 0x53, 0x54, + 0x42, 0x48, 0x6f, 0x45, 0x57, 0x67, 0x51, 0x34, 0x5a, 0x42, 0x61, 0x48, 0x52, 0x30, + 0x63, 0x48, 0x4d, 0x36, 0x4c, 0x79, 0x39, 0x6a, 0x5a, 0x58, 0x4a, 0x30, 0x61, 0x57, + 0x5a, 0x70, 0x59, 0x32, 0x46, 0x30, 0x5a, 0x58, 0x4d, 0x75, 0x64, 0x48, 0x4a, 0x31, + 0x63, 0x33, 0x52, 0x6c, 0x5a, 0x48, 0x4e, 0x6c, 0x0a, 0x63, 0x6e, 0x5a, 0x70, 0x59, + 0x32, 0x56, 0x7a, 0x4c, 0x6d, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x4c, 0x6d, 0x4e, + 0x76, 0x62, 0x53, 0x39, 0x4a, 0x62, 0x6e, 0x52, 0x6c, 0x62, 0x46, 0x4e, 0x48, 0x57, + 0x46, 0x4a, 0x76, 0x62, 0x33, 0x52, 0x44, 0x51, 0x53, 0x35, 0x6b, 0x5a, 0x58, 0x49, + 0x77, 0x48, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x4f, 0x42, 0x42, 0x59, 0x45, 0x46, + 0x4e, 0x44, 0x6f, 0x0a, 0x71, 0x74, 0x70, 0x31, 0x31, 0x2f, 0x6b, 0x75, 0x53, 0x52, + 0x65, 0x59, 0x50, 0x48, 0x73, 0x55, 0x5a, 0x64, 0x44, 0x56, 0x38, 0x6c, 0x6c, 0x4e, + 0x4d, 0x41, 0x34, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44, 0x77, 0x45, 0x42, 0x2f, 0x77, + 0x51, 0x45, 0x41, 0x77, 0x49, 0x42, 0x42, 0x6a, 0x41, 0x53, 0x42, 0x67, 0x4e, 0x56, + 0x48, 0x52, 0x4d, 0x42, 0x41, 0x66, 0x38, 0x45, 0x43, 0x44, 0x41, 0x47, 0x0a, 0x41, + 0x51, 0x48, 0x2f, 0x41, 0x67, 0x45, 0x41, 0x4d, 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, + 0x47, 0x53, 0x4d, 0x34, 0x39, 0x42, 0x41, 0x4d, 0x43, 0x41, 0x30, 0x67, 0x41, 0x4d, + 0x45, 0x55, 0x43, 0x49, 0x51, 0x43, 0x4a, 0x67, 0x54, 0x62, 0x74, 0x56, 0x71, 0x4f, + 0x79, 0x5a, 0x31, 0x6d, 0x33, 0x6a, 0x71, 0x69, 0x41, 0x58, 0x4d, 0x36, 0x51, 0x59, + 0x61, 0x36, 0x72, 0x35, 0x73, 0x57, 0x53, 0x0a, 0x34, 0x79, 0x2f, 0x47, 0x37, 0x79, + 0x38, 0x75, 0x49, 0x4a, 0x47, 0x78, 0x64, 0x77, 0x49, 0x67, 0x52, 0x71, 0x50, 0x76, + 0x42, 0x53, 0x4b, 0x7a, 0x7a, 0x51, 0x61, 0x67, 0x42, 0x4c, 0x51, 0x71, 0x35, 0x73, + 0x35, 0x41, 0x37, 0x30, 0x70, 0x64, 0x6f, 0x69, 0x61, 0x52, 0x4a, 0x38, 0x7a, 0x2f, + 0x30, 0x75, 0x44, 0x7a, 0x34, 0x4e, 0x67, 0x56, 0x39, 0x31, 0x6b, 0x3d, 0x0a, 0x2d, + 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x2d, 0x2d, 0x2d, + 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, + 0x43, 0x6a, 0x7a, 0x43, 0x43, 0x41, 0x6a, 0x53, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, + 0x67, 0x49, 0x55, 0x49, 0x6d, 0x55, 0x4d, 0x31, 0x6c, 0x71, 0x64, 0x4e, 0x49, 0x6e, + 0x7a, 0x67, 0x37, 0x53, 0x56, 0x55, 0x72, 0x39, 0x51, 0x47, 0x7a, 0x6b, 0x6e, 0x42, + 0x71, 0x77, 0x77, 0x43, 0x67, 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, + 0x45, 0x41, 0x77, 0x49, 0x77, 0x0a, 0x61, 0x44, 0x45, 0x61, 0x4d, 0x42, 0x67, 0x47, + 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x52, 0x53, 0x57, 0x35, 0x30, 0x5a, 0x57, + 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, 0x49, 0x46, 0x4a, 0x76, 0x62, 0x33, 0x51, 0x67, + 0x51, 0x30, 0x45, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, + 0x6f, 0x4d, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, 0x73, 0x49, 0x45, 0x4e, 0x76, + 0x0a, 0x63, 0x6e, 0x42, 0x76, 0x63, 0x6d, 0x46, 0x30, 0x61, 0x57, 0x39, 0x75, 0x4d, + 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x48, 0x44, 0x41, 0x74, + 0x54, 0x59, 0x57, 0x35, 0x30, 0x59, 0x53, 0x42, 0x44, 0x62, 0x47, 0x46, 0x79, 0x59, + 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, 0x31, 0x55, 0x45, 0x43, 0x41, 0x77, + 0x43, 0x51, 0x30, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, 0x0a, 0x42, 0x67, 0x4e, 0x56, + 0x42, 0x41, 0x59, 0x54, 0x41, 0x6c, 0x56, 0x54, 0x4d, 0x42, 0x34, 0x58, 0x44, 0x54, + 0x45, 0x34, 0x4d, 0x44, 0x55, 0x79, 0x4d, 0x54, 0x45, 0x77, 0x4e, 0x44, 0x55, 0x78, + 0x4d, 0x46, 0x6f, 0x58, 0x44, 0x54, 0x51, 0x35, 0x4d, 0x54, 0x49, 0x7a, 0x4d, 0x54, + 0x49, 0x7a, 0x4e, 0x54, 0x6b, 0x31, 0x4f, 0x56, 0x6f, 0x77, 0x61, 0x44, 0x45, 0x61, + 0x4d, 0x42, 0x67, 0x47, 0x0a, 0x41, 0x31, 0x55, 0x45, 0x41, 0x77, 0x77, 0x52, 0x53, + 0x57, 0x35, 0x30, 0x5a, 0x57, 0x77, 0x67, 0x55, 0x30, 0x64, 0x59, 0x49, 0x46, 0x4a, + 0x76, 0x62, 0x33, 0x51, 0x67, 0x51, 0x30, 0x45, 0x78, 0x47, 0x6a, 0x41, 0x59, 0x42, + 0x67, 0x4e, 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x45, 0x55, 0x6c, 0x75, 0x64, 0x47, 0x56, + 0x73, 0x49, 0x45, 0x4e, 0x76, 0x63, 0x6e, 0x42, 0x76, 0x63, 0x6d, 0x46, 0x30, 0x0a, + 0x61, 0x57, 0x39, 0x75, 0x4d, 0x52, 0x51, 0x77, 0x45, 0x67, 0x59, 0x44, 0x56, 0x51, + 0x51, 0x48, 0x44, 0x41, 0x74, 0x54, 0x59, 0x57, 0x35, 0x30, 0x59, 0x53, 0x42, 0x44, + 0x62, 0x47, 0x46, 0x79, 0x59, 0x54, 0x45, 0x4c, 0x4d, 0x41, 0x6b, 0x47, 0x41, 0x31, + 0x55, 0x45, 0x43, 0x41, 0x77, 0x43, 0x51, 0x30, 0x45, 0x78, 0x43, 0x7a, 0x41, 0x4a, + 0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x59, 0x54, 0x0a, 0x41, 0x6c, 0x56, 0x54, 0x4d, + 0x46, 0x6b, 0x77, 0x45, 0x77, 0x59, 0x48, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, + 0x43, 0x41, 0x51, 0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x44, 0x41, + 0x51, 0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x43, 0x36, 0x6e, 0x45, 0x77, 0x4d, 0x44, + 0x49, 0x59, 0x5a, 0x4f, 0x6a, 0x2f, 0x69, 0x50, 0x57, 0x73, 0x43, 0x7a, 0x61, 0x45, + 0x4b, 0x69, 0x37, 0x0a, 0x31, 0x4f, 0x69, 0x4f, 0x53, 0x4c, 0x52, 0x46, 0x68, 0x57, + 0x47, 0x6a, 0x62, 0x6e, 0x42, 0x56, 0x4a, 0x66, 0x56, 0x6e, 0x6b, 0x59, 0x34, 0x75, + 0x33, 0x49, 0x6a, 0x6b, 0x44, 0x59, 0x59, 0x4c, 0x30, 0x4d, 0x78, 0x4f, 0x34, 0x6d, + 0x71, 0x73, 0x79, 0x59, 0x6a, 0x6c, 0x42, 0x61, 0x6c, 0x54, 0x56, 0x59, 0x78, 0x46, + 0x50, 0x32, 0x73, 0x4a, 0x42, 0x4b, 0x35, 0x7a, 0x6c, 0x4b, 0x4f, 0x42, 0x0a, 0x75, + 0x7a, 0x43, 0x42, 0x75, 0x44, 0x41, 0x66, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x53, 0x4d, + 0x45, 0x47, 0x44, 0x41, 0x57, 0x67, 0x42, 0x51, 0x69, 0x5a, 0x51, 0x7a, 0x57, 0x57, + 0x70, 0x30, 0x30, 0x69, 0x66, 0x4f, 0x44, 0x74, 0x4a, 0x56, 0x53, 0x76, 0x31, 0x41, + 0x62, 0x4f, 0x53, 0x63, 0x47, 0x72, 0x44, 0x42, 0x53, 0x42, 0x67, 0x4e, 0x56, 0x48, + 0x52, 0x38, 0x45, 0x53, 0x7a, 0x42, 0x4a, 0x0a, 0x4d, 0x45, 0x65, 0x67, 0x52, 0x61, + 0x42, 0x44, 0x68, 0x6b, 0x46, 0x6f, 0x64, 0x48, 0x52, 0x77, 0x63, 0x7a, 0x6f, 0x76, + 0x4c, 0x32, 0x4e, 0x6c, 0x63, 0x6e, 0x52, 0x70, 0x5a, 0x6d, 0x6c, 0x6a, 0x59, 0x58, + 0x52, 0x6c, 0x63, 0x79, 0x35, 0x30, 0x63, 0x6e, 0x56, 0x7a, 0x64, 0x47, 0x56, 0x6b, + 0x63, 0x32, 0x56, 0x79, 0x64, 0x6d, 0x6c, 0x6a, 0x5a, 0x58, 0x4d, 0x75, 0x61, 0x57, + 0x35, 0x30, 0x0a, 0x5a, 0x57, 0x77, 0x75, 0x59, 0x32, 0x39, 0x74, 0x4c, 0x30, 0x6c, + 0x75, 0x64, 0x47, 0x56, 0x73, 0x55, 0x30, 0x64, 0x59, 0x55, 0x6d, 0x39, 0x76, 0x64, + 0x45, 0x4e, 0x42, 0x4c, 0x6d, 0x52, 0x6c, 0x63, 0x6a, 0x41, 0x64, 0x42, 0x67, 0x4e, + 0x56, 0x48, 0x51, 0x34, 0x45, 0x46, 0x67, 0x51, 0x55, 0x49, 0x6d, 0x55, 0x4d, 0x31, + 0x6c, 0x71, 0x64, 0x4e, 0x49, 0x6e, 0x7a, 0x67, 0x37, 0x53, 0x56, 0x0a, 0x55, 0x72, + 0x39, 0x51, 0x47, 0x7a, 0x6b, 0x6e, 0x42, 0x71, 0x77, 0x77, 0x44, 0x67, 0x59, 0x44, + 0x56, 0x52, 0x30, 0x50, 0x41, 0x51, 0x48, 0x2f, 0x42, 0x41, 0x51, 0x44, 0x41, 0x67, + 0x45, 0x47, 0x4d, 0x42, 0x49, 0x47, 0x41, 0x31, 0x55, 0x64, 0x45, 0x77, 0x45, 0x42, + 0x2f, 0x77, 0x51, 0x49, 0x4d, 0x41, 0x59, 0x42, 0x41, 0x66, 0x38, 0x43, 0x41, 0x51, + 0x45, 0x77, 0x43, 0x67, 0x59, 0x49, 0x0a, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, + 0x45, 0x41, 0x77, 0x49, 0x44, 0x53, 0x51, 0x41, 0x77, 0x52, 0x67, 0x49, 0x68, 0x41, + 0x4f, 0x57, 0x2f, 0x35, 0x51, 0x6b, 0x52, 0x2b, 0x53, 0x39, 0x43, 0x69, 0x53, 0x44, + 0x63, 0x4e, 0x6f, 0x6f, 0x77, 0x4c, 0x75, 0x50, 0x52, 0x4c, 0x73, 0x57, 0x47, 0x66, + 0x2f, 0x59, 0x69, 0x37, 0x47, 0x53, 0x58, 0x39, 0x34, 0x42, 0x67, 0x77, 0x54, 0x77, + 0x67, 0x0a, 0x41, 0x69, 0x45, 0x41, 0x34, 0x4a, 0x30, 0x6c, 0x72, 0x48, 0x6f, 0x4d, + 0x73, 0x2b, 0x58, 0x6f, 0x35, 0x6f, 0x2f, 0x73, 0x58, 0x36, 0x4f, 0x39, 0x51, 0x57, + 0x78, 0x48, 0x52, 0x41, 0x76, 0x5a, 0x55, 0x47, 0x4f, 0x64, 0x52, 0x51, 0x37, 0x63, + 0x76, 0x71, 0x52, 0x58, 0x61, 0x71, 0x49, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, + 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, + 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x00, + } + + var collateral = TeeQvCollateral{ + MajorVersion: 3, + MinorVersion: 1, + TeeType: 0, + PckCrlIssuerChain: []byte{ + 45, 45, 45, 45, 45, 66, 69, 71, 73, 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, + 69, 45, 45, 45, 45, 45, 10, 77, 73, 73, 67, 109, 68, 67, 67, 65, 106, 54, 103, 65, + 119, 73, 66, 65, 103, 73, 86, 65, 78, 68, 111, 113, 116, 112, 49, 49, 47, 107, 117, + 83, 82, 101, 89, 80, 72, 115, 85, 90, 100, 68, 86, 56, 108, 108, 78, 77, 65, 111, + 71, 67, 67, 113, 71, 83, 77, 52, 57, 66, 65, 77, 67, 10, 77, 71, 103, 120, 71, 106, + 65, 89, 66, 103, 78, 86, 66, 65, 77, 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, + 70, 78, 72, 87, 67, 66, 83, 98, 50, 57, 48, 73, 69, 78, 66, 77, 82, 111, 119, 71, + 65, 89, 68, 86, 81, 81, 75, 68, 66, 70, 74, 98, 110, 82, 108, 98, 67, 66, 68, 10, + 98, 51, 74, 119, 98, 51, 74, 104, 100, 71, 108, 118, 98, 106, 69, 85, 77, 66, 73, + 71, 65, 49, 85, 69, 66, 119, 119, 76, 85, 50, 70, 117, 100, 71, 69, 103, 81, 50, + 120, 104, 99, 109, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, 103, 77, 65, + 107, 78, 66, 77, 81, 115, 119, 10, 67, 81, 89, 68, 86, 81, 81, 71, 69, 119, 74, 86, + 85, 122, 65, 101, 70, 119, 48, 120, 79, 68, 65, 49, 77, 106, 69, 120, 77, 68, 85, + 119, 77, 84, 66, 97, 70, 119, 48, 122, 77, 122, 65, 49, 77, 106, 69, 120, 77, 68, + 85, 119, 77, 84, 66, 97, 77, 72, 69, 120, 73, 122, 65, 104, 10, 66, 103, 78, 86, + 66, 65, 77, 77, 71, 107, 108, 117, 100, 71, 86, 115, 73, 70, 78, 72, 87, 67, 66, + 81, 81, 48, 115, 103, 85, 72, 74, 118, 89, 50, 86, 122, 99, 50, 57, 121, 73, 69, + 78, 66, 77, 82, 111, 119, 71, 65, 89, 68, 86, 81, 81, 75, 68, 66, 70, 74, 98, 110, + 82, 108, 10, 98, 67, 66, 68, 98, 51, 74, 119, 98, 51, 74, 104, 100, 71, 108, 118, + 98, 106, 69, 85, 77, 66, 73, 71, 65, 49, 85, 69, 66, 119, 119, 76, 85, 50, 70, 117, + 100, 71, 69, 103, 81, 50, 120, 104, 99, 109, 69, 120, 67, 122, 65, 74, 66, 103, 78, + 86, 66, 65, 103, 77, 65, 107, 78, 66, 10, 77, 81, 115, 119, 67, 81, 89, 68, 86, 81, + 81, 71, 69, 119, 74, 86, 85, 122, 66, 90, 77, 66, 77, 71, 66, 121, 113, 71, 83, 77, + 52, 57, 65, 103, 69, 71, 67, 67, 113, 71, 83, 77, 52, 57, 65, 119, 69, 72, 65, 48, + 73, 65, 66, 76, 57, 113, 43, 78, 77, 112, 50, 73, 79, 103, 10, 116, 100, 108, 49, + 98, 107, 47, 117, 87, 90, 53, 43, 84, 71, 81, 109, 56, 97, 67, 105, 56, 122, 55, + 56, 102, 115, 43, 102, 75, 67, 81, 51, 100, 43, 117, 68, 122, 88, 110, 86, 84, 65, + 84, 50, 90, 104, 68, 67, 105, 102, 121, 73, 117, 74, 119, 118, 78, 51, 119, 78, 66, + 112, 57, 105, 10, 72, 66, 83, 83, 77, 74, 77, 74, 114, 66, 79, 106, 103, 98, 115, + 119, 103, 98, 103, 119, 72, 119, 89, 68, 86, 82, 48, 106, 66, 66, 103, 119, 70, + 111, 65, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, + 85, 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 10, 85, 103, 89, 68, 86, 82, + 48, 102, 66, 69, 115, 119, 83, 84, 66, 72, 111, 69, 87, 103, 81, 52, 90, 66, 97, + 72, 82, 48, 99, 72, 77, 54, 76, 121, 57, 106, 90, 88, 74, 48, 97, 87, 90, 112, 89, + 50, 70, 48, 90, 88, 77, 117, 100, 72, 74, 49, 99, 51, 82, 108, 90, 72, 78, 108, 10, + 99, 110, 90, 112, 89, 50, 86, 122, 76, 109, 108, 117, 100, 71, 86, 115, 76, 109, + 78, 118, 98, 83, 57, 74, 98, 110, 82, 108, 98, 70, 78, 72, 87, 70, 74, 118, 98, 51, + 82, 68, 81, 83, 53, 107, 90, 88, 73, 119, 72, 81, 89, 68, 86, 82, 48, 79, 66, 66, + 89, 69, 70, 78, 68, 111, 10, 113, 116, 112, 49, 49, 47, 107, 117, 83, 82, 101, 89, + 80, 72, 115, 85, 90, 100, 68, 86, 56, 108, 108, 78, 77, 65, 52, 71, 65, 49, 85, + 100, 68, 119, 69, 66, 47, 119, 81, 69, 65, 119, 73, 66, 66, 106, 65, 83, 66, 103, + 78, 86, 72, 82, 77, 66, 65, 102, 56, 69, 67, 68, 65, 71, 10, 65, 81, 72, 47, 65, + 103, 69, 65, 77, 65, 111, 71, 67, 67, 113, 71, 83, 77, 52, 57, 66, 65, 77, 67, 65, + 48, 103, 65, 77, 69, 85, 67, 73, 81, 67, 74, 103, 84, 98, 116, 86, 113, 79, 121, + 90, 49, 109, 51, 106, 113, 105, 65, 88, 77, 54, 81, 89, 97, 54, 114, 53, 115, 87, + 83, 10, 52, 121, 47, 71, 55, 121, 56, 117, 73, 74, 71, 120, 100, 119, 73, 103, 82, + 113, 80, 118, 66, 83, 75, 122, 122, 81, 97, 103, 66, 76, 81, 113, 53, 115, 53, 65, + 55, 48, 112, 100, 111, 105, 97, 82, 74, 56, 122, 47, 48, 117, 68, 122, 52, 78, 103, + 86, 57, 49, 107, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, 67, 69, 82, 84, 73, + 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 45, 45, 45, 45, 45, 66, 69, 71, 73, + 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 77, 73, + 73, 67, 106, 122, 67, 67, 65, 106, 83, 103, 65, 119, 73, 66, 65, 103, 73, 85, 73, + 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, 85, 114, 57, 81, + 71, 122, 107, 110, 66, 113, 119, 119, 67, 103, 89, 73, 75, 111, 90, 73, 122, 106, + 48, 69, 65, 119, 73, 119, 10, 97, 68, 69, 97, 77, 66, 103, 71, 65, 49, 85, 69, 65, + 119, 119, 82, 83, 87, 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, 73, 70, 74, 118, + 98, 51, 81, 103, 81, 48, 69, 120, 71, 106, 65, 89, 66, 103, 78, 86, 66, 65, 111, + 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, 69, 78, 118, 10, 99, 110, 66, 118, 99, + 109, 70, 48, 97, 87, 57, 117, 77, 82, 81, 119, 69, 103, 89, 68, 86, 81, 81, 72, 68, + 65, 116, 84, 89, 87, 53, 48, 89, 83, 66, 68, 98, 71, 70, 121, 89, 84, 69, 76, 77, + 65, 107, 71, 65, 49, 85, 69, 67, 65, 119, 67, 81, 48, 69, 120, 67, 122, 65, 74, 10, + 66, 103, 78, 86, 66, 65, 89, 84, 65, 108, 86, 84, 77, 66, 52, 88, 68, 84, 69, 52, + 77, 68, 85, 121, 77, 84, 69, 119, 78, 68, 85, 120, 77, 70, 111, 88, 68, 84, 81, 53, + 77, 84, 73, 122, 77, 84, 73, 122, 78, 84, 107, 49, 79, 86, 111, 119, 97, 68, 69, + 97, 77, 66, 103, 71, 10, 65, 49, 85, 69, 65, 119, 119, 82, 83, 87, 53, 48, 90, 87, + 119, 103, 85, 48, 100, 89, 73, 70, 74, 118, 98, 51, 81, 103, 81, 48, 69, 120, 71, + 106, 65, 89, 66, 103, 78, 86, 66, 65, 111, 77, 69, 85, 108, 117, 100, 71, 86, 115, + 73, 69, 78, 118, 99, 110, 66, 118, 99, 109, 70, 48, 10, 97, 87, 57, 117, 77, 82, + 81, 119, 69, 103, 89, 68, 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, 53, 48, 89, 83, + 66, 68, 98, 71, 70, 121, 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, 85, 69, 67, 65, + 119, 67, 81, 48, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, 89, 84, 10, 65, + 108, 86, 84, 77, 70, 107, 119, 69, 119, 89, 72, 75, 111, 90, 73, 122, 106, 48, 67, + 65, 81, 89, 73, 75, 111, 90, 73, 122, 106, 48, 68, 65, 81, 99, 68, 81, 103, 65, 69, + 67, 54, 110, 69, 119, 77, 68, 73, 89, 90, 79, 106, 47, 105, 80, 87, 115, 67, 122, + 97, 69, 75, 105, 55, 10, 49, 79, 105, 79, 83, 76, 82, 70, 104, 87, 71, 106, 98, + 110, 66, 86, 74, 102, 86, 110, 107, 89, 52, 117, 51, 73, 106, 107, 68, 89, 89, 76, + 48, 77, 120, 79, 52, 109, 113, 115, 121, 89, 106, 108, 66, 97, 108, 84, 86, 89, + 120, 70, 80, 50, 115, 74, 66, 75, 53, 122, 108, 75, 79, 66, 10, 117, 122, 67, 66, + 117, 68, 65, 102, 66, 103, 78, 86, 72, 83, 77, 69, 71, 68, 65, 87, 103, 66, 81, + 105, 90, 81, 122, 87, 87, 112, 48, 48, 105, 102, 79, 68, 116, 74, 86, 83, 118, 49, + 65, 98, 79, 83, 99, 71, 114, 68, 66, 83, 66, 103, 78, 86, 72, 82, 56, 69, 83, 122, + 66, 74, 10, 77, 69, 101, 103, 82, 97, 66, 68, 104, 107, 70, 111, 100, 72, 82, 119, + 99, 122, 111, 118, 76, 50, 78, 108, 99, 110, 82, 112, 90, 109, 108, 106, 89, 88, + 82, 108, 99, 121, 53, 48, 99, 110, 86, 122, 100, 71, 86, 107, 99, 50, 86, 121, 100, + 109, 108, 106, 90, 88, 77, 117, 97, 87, 53, 48, 10, 90, 87, 119, 117, 89, 50, 57, + 116, 76, 48, 108, 117, 100, 71, 86, 115, 85, 48, 100, 89, 85, 109, 57, 118, 100, + 69, 78, 66, 76, 109, 82, 108, 99, 106, 65, 100, 66, 103, 78, 86, 72, 81, 52, 69, + 70, 103, 81, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, + 86, 10, 85, 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 68, 103, 89, 68, 86, + 82, 48, 80, 65, 81, 72, 47, 66, 65, 81, 68, 65, 103, 69, 71, 77, 66, 73, 71, 65, + 49, 85, 100, 69, 119, 69, 66, 47, 119, 81, 73, 77, 65, 89, 66, 65, 102, 56, 67, 65, + 81, 69, 119, 67, 103, 89, 73, 10, 75, 111, 90, 73, 122, 106, 48, 69, 65, 119, 73, + 68, 83, 81, 65, 119, 82, 103, 73, 104, 65, 79, 87, 47, 53, 81, 107, 82, 43, 83, 57, + 67, 105, 83, 68, 99, 78, 111, 111, 119, 76, 117, 80, 82, 76, 115, 87, 71, 102, 47, + 89, 105, 55, 71, 83, 88, 57, 52, 66, 103, 119, 84, 119, 103, 10, 65, 105, 69, 65, + 52, 74, 48, 108, 114, 72, 111, 77, 115, 43, 88, 111, 53, 111, 47, 115, 88, 54, 79, + 57, 81, 87, 120, 72, 82, 65, 118, 90, 85, 71, 79, 100, 82, 81, 55, 99, 118, 113, + 82, 88, 97, 113, 73, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, 67, 69, 82, 84, + 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 0, + }, + RootCaCrl: []byte{ + 48, 130, 1, 33, 48, 129, 200, 2, 1, 1, 48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, 2, + 48, 104, 49, 26, 48, 24, 6, 3, 85, 4, 3, 12, 17, 73, 110, 116, 101, 108, 32, 83, + 71, 88, 32, 82, 111, 111, 116, 32, 67, 65, 49, 26, 48, 24, 6, 3, 85, 4, 10, 12, 17, + 73, 110, 116, 101, 108, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, + 49, 20, 48, 18, 6, 3, 85, 4, 7, 12, 11, 83, 97, 110, 116, 97, 32, 67, 108, 97, 114, + 97, 49, 11, 48, 9, 6, 3, 85, 4, 8, 12, 2, 67, 65, 49, 11, 48, 9, 6, 3, 85, 4, 6, + 19, 2, 85, 83, 23, 13, 50, 51, 48, 52, 48, 51, 49, 48, 50, 50, 53, 49, 90, 23, 13, + 50, 52, 48, 52, 48, 50, 49, 48, 50, 50, 53, 49, 90, 160, 47, 48, 45, 48, 10, 6, 3, + 85, 29, 20, 4, 3, 2, 1, 1, 48, 31, 6, 3, 85, 29, 35, 4, 24, 48, 22, 128, 20, 34, + 101, 12, 214, 90, 157, 52, 137, 243, 131, 180, 149, 82, 191, 80, 27, 57, 39, 6, + 172, 48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, 2, 3, 72, 0, 48, 69, 2, 32, 81, 87, + 125, 71, 217, 251, 161, 87, 182, 95, 30, 181, 244, 101, 123, 188, 94, 86, 204, 175, + 115, 90, 3, 241, 185, 99, 215, 4, 128, 90, 177, 24, 2, 33, 0, 147, 144, 21, 236, + 22, 54, 231, 234, 250, 95, 66, 108, 30, 64, 38, 71, 198, 115, 19, 43, 104, 80, 202, + 189, 104, 206, 246, 186, 215, 104, 42, 3, 0, + }, + PckCrl: []byte{ + 48, 130, 1, 41, 48, 129, 209, 2, 1, 1, 48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, 2, + 48, 113, 49, 35, 48, 33, 6, 3, 85, 4, 3, 12, 26, 73, 110, 116, 101, 108, 32, 83, + 71, 88, 32, 80, 67, 75, 32, 80, 114, 111, 99, 101, 115, 115, 111, 114, 32, 67, 65, + 49, 26, 48, 24, 6, 3, 85, 4, 10, 12, 17, 73, 110, 116, 101, 108, 32, 67, 111, 114, + 112, 111, 114, 97, 116, 105, 111, 110, 49, 20, 48, 18, 6, 3, 85, 4, 7, 12, 11, 83, + 97, 110, 116, 97, 32, 67, 108, 97, 114, 97, 49, 11, 48, 9, 6, 3, 85, 4, 8, 12, 2, + 67, 65, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 85, 83, 23, 13, 50, 51, 48, 53, 48, + 57, 49, 50, 52, 54, 50, 52, 90, 23, 13, 50, 51, 48, 54, 48, 56, 49, 50, 52, 54, 50, + 52, 90, 160, 47, 48, 45, 48, 10, 6, 3, 85, 29, 20, 4, 3, 2, 1, 1, 48, 31, 6, 3, 85, + 29, 35, 4, 24, 48, 22, 128, 20, 208, 232, 170, 218, 117, 215, 249, 46, 73, 23, 152, + 60, 123, 20, 101, 208, 213, 242, 89, 77, 48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, + 2, 3, 71, 0, 48, 68, 2, 32, 27, 223, 5, 23, 228, 147, 24, 110, 238, 12, 48, 228, + 112, 248, 245, 217, 211, 202, 42, 56, 61, 216, 106, 201, 130, 9, 2, 250, 236, 7, + 139, 186, 2, 32, 86, 206, 118, 134, 129, 237, 244, 14, 117, 201, 156, 112, 225, 33, + 231, 72, 85, 193, 91, 236, 63, 45, 20, 17, 170, 171, 225, 57, 84, 126, 10, 8, 0, + }, + TcbInfoIssuerChain: []byte{ + 45, 45, 45, 45, 45, 66, 69, 71, 73, 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, + 69, 45, 45, 45, 45, 45, 10, 77, 73, 73, 67, 105, 122, 67, 67, 65, 106, 75, 103, 65, + 119, 73, 66, 65, 103, 73, 85, 102, 106, 105, 67, 49, 102, 116, 86, 75, 85, 112, 65, + 83, 89, 53, 70, 104, 65, 80, 112, 70, 74, 71, 57, 57, 70, 85, 119, 67, 103, 89, 73, + 75, 111, 90, 73, 122, 106, 48, 69, 65, 119, 73, 119, 10, 97, 68, 69, 97, 77, 66, + 103, 71, 65, 49, 85, 69, 65, 119, 119, 82, 83, 87, 53, 48, 90, 87, 119, 103, 85, + 48, 100, 89, 73, 70, 74, 118, 98, 51, 81, 103, 81, 48, 69, 120, 71, 106, 65, 89, + 66, 103, 78, 86, 66, 65, 111, 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, 69, 78, + 118, 10, 99, 110, 66, 118, 99, 109, 70, 48, 97, 87, 57, 117, 77, 82, 81, 119, 69, + 103, 89, 68, 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, 53, 48, 89, 83, 66, 68, 98, + 71, 70, 121, 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, 85, 69, 67, 65, 119, 67, 81, + 48, 69, 120, 67, 122, 65, 74, 10, 66, 103, 78, 86, 66, 65, 89, 84, 65, 108, 86, 84, + 77, 66, 52, 88, 68, 84, 69, 52, 77, 68, 85, 121, 77, 84, 69, 119, 78, 84, 65, 120, + 77, 70, 111, 88, 68, 84, 73, 49, 77, 68, 85, 121, 77, 84, 69, 119, 78, 84, 65, 120, + 77, 70, 111, 119, 98, 68, 69, 101, 77, 66, 119, 71, 10, 65, 49, 85, 69, 65, 119, + 119, 86, 83, 87, 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, 73, 70, 82, 68, 81, + 105, 66, 84, 97, 87, 100, 117, 97, 87, 53, 110, 77, 82, 111, 119, 71, 65, 89, 68, + 86, 81, 81, 75, 68, 66, 70, 74, 98, 110, 82, 108, 98, 67, 66, 68, 98, 51, 74, 119, + 10, 98, 51, 74, 104, 100, 71, 108, 118, 98, 106, 69, 85, 77, 66, 73, 71, 65, 49, + 85, 69, 66, 119, 119, 76, 85, 50, 70, 117, 100, 71, 69, 103, 81, 50, 120, 104, 99, + 109, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, 103, 77, 65, 107, 78, 66, + 77, 81, 115, 119, 67, 81, 89, 68, 10, 86, 81, 81, 71, 69, 119, 74, 86, 85, 122, 66, + 90, 77, 66, 77, 71, 66, 121, 113, 71, 83, 77, 52, 57, 65, 103, 69, 71, 67, 67, 113, + 71, 83, 77, 52, 57, 65, 119, 69, 72, 65, 48, 73, 65, 66, 69, 78, 70, 71, 56, 120, + 122, 121, 100, 87, 82, 102, 75, 57, 50, 98, 109, 71, 118, 10, 80, 43, 109, 65, 104, + 57, 49, 80, 69, 121, 86, 55, 74, 104, 54, 70, 71, 74, 100, 53, 110, 100, 69, 57, + 97, 66, 72, 55, 82, 51, 69, 52, 65, 55, 117, 98, 114, 108, 104, 47, 122, 78, 51, + 67, 52, 120, 118, 112, 111, 111, 117, 71, 108, 105, 114, 77, 98, 97, 43, 87, 50, + 108, 106, 117, 10, 121, 112, 97, 106, 103, 98, 85, 119, 103, 98, 73, 119, 72, 119, + 89, 68, 86, 82, 48, 106, 66, 66, 103, 119, 70, 111, 65, 85, 73, 109, 85, 77, 49, + 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, 85, 114, 57, 81, 71, 122, 107, + 110, 66, 113, 119, 119, 85, 103, 89, 68, 86, 82, 48, 102, 10, 66, 69, 115, 119, 83, + 84, 66, 72, 111, 69, 87, 103, 81, 52, 90, 66, 97, 72, 82, 48, 99, 72, 77, 54, 76, + 121, 57, 106, 90, 88, 74, 48, 97, 87, 90, 112, 89, 50, 70, 48, 90, 88, 77, 117, + 100, 72, 74, 49, 99, 51, 82, 108, 90, 72, 78, 108, 99, 110, 90, 112, 89, 50, 86, + 122, 10, 76, 109, 108, 117, 100, 71, 86, 115, 76, 109, 78, 118, 98, 83, 57, 74, 98, + 110, 82, 108, 98, 70, 78, 72, 87, 70, 74, 118, 98, 51, 82, 68, 81, 83, 53, 107, 90, + 88, 73, 119, 72, 81, 89, 68, 86, 82, 48, 79, 66, 66, 89, 69, 70, 72, 52, 52, 103, + 116, 88, 55, 86, 83, 108, 75, 10, 81, 69, 109, 79, 82, 89, 81, 68, 54, 82, 83, 82, + 118, 102, 82, 86, 77, 65, 52, 71, 65, 49, 85, 100, 68, 119, 69, 66, 47, 119, 81, + 69, 65, 119, 73, 71, 119, 68, 65, 77, 66, 103, 78, 86, 72, 82, 77, 66, 65, 102, 56, + 69, 65, 106, 65, 65, 77, 65, 111, 71, 67, 67, 113, 71, 10, 83, 77, 52, 57, 66, 65, + 77, 67, 65, 48, 99, 65, 77, 69, 81, 67, 73, 66, 57, 67, 56, 119, 79, 65, 78, 47, + 73, 109, 120, 68, 116, 71, 65, 67, 86, 50, 52, 54, 75, 99, 113, 106, 97, 103, 90, + 79, 82, 48, 107, 121, 99, 116, 121, 66, 114, 115, 71, 71, 74, 86, 65, 105, 65, 106, + 10, 102, 116, 98, 114, 78, 71, 115, 71, 85, 56, 89, 72, 50, 49, 49, 100, 82, 105, + 89, 78, 111, 80, 80, 117, 49, 57, 90, 112, 47, 122, 101, 56, 74, 109, 104, 117, + 106, 66, 48, 111, 66, 119, 61, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, 67, 69, + 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 45, 45, 45, 45, 45, 66, + 69, 71, 73, 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, + 10, 77, 73, 73, 67, 106, 122, 67, 67, 65, 106, 83, 103, 65, 119, 73, 66, 65, 103, + 73, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, 85, + 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 67, 103, 89, 73, 75, 111, 90, + 73, 122, 106, 48, 69, 65, 119, 73, 119, 10, 97, 68, 69, 97, 77, 66, 103, 71, 65, + 49, 85, 69, 65, 119, 119, 82, 83, 87, 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, + 73, 70, 74, 118, 98, 51, 81, 103, 81, 48, 69, 120, 71, 106, 65, 89, 66, 103, 78, + 86, 66, 65, 111, 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, 69, 78, 118, 10, 99, + 110, 66, 118, 99, 109, 70, 48, 97, 87, 57, 117, 77, 82, 81, 119, 69, 103, 89, 68, + 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, 53, 48, 89, 83, 66, 68, 98, 71, 70, 121, + 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, 85, 69, 67, 65, 119, 67, 81, 48, 69, 120, + 67, 122, 65, 74, 10, 66, 103, 78, 86, 66, 65, 89, 84, 65, 108, 86, 84, 77, 66, 52, + 88, 68, 84, 69, 52, 77, 68, 85, 121, 77, 84, 69, 119, 78, 68, 85, 120, 77, 70, 111, + 88, 68, 84, 81, 53, 77, 84, 73, 122, 77, 84, 73, 122, 78, 84, 107, 49, 79, 86, 111, + 119, 97, 68, 69, 97, 77, 66, 103, 71, 10, 65, 49, 85, 69, 65, 119, 119, 82, 83, 87, + 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, 73, 70, 74, 118, 98, 51, 81, 103, 81, + 48, 69, 120, 71, 106, 65, 89, 66, 103, 78, 86, 66, 65, 111, 77, 69, 85, 108, 117, + 100, 71, 86, 115, 73, 69, 78, 118, 99, 110, 66, 118, 99, 109, 70, 48, 10, 97, 87, + 57, 117, 77, 82, 81, 119, 69, 103, 89, 68, 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, + 53, 48, 89, 83, 66, 68, 98, 71, 70, 121, 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, + 85, 69, 67, 65, 119, 67, 81, 48, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, + 89, 84, 10, 65, 108, 86, 84, 77, 70, 107, 119, 69, 119, 89, 72, 75, 111, 90, 73, + 122, 106, 48, 67, 65, 81, 89, 73, 75, 111, 90, 73, 122, 106, 48, 68, 65, 81, 99, + 68, 81, 103, 65, 69, 67, 54, 110, 69, 119, 77, 68, 73, 89, 90, 79, 106, 47, 105, + 80, 87, 115, 67, 122, 97, 69, 75, 105, 55, 10, 49, 79, 105, 79, 83, 76, 82, 70, + 104, 87, 71, 106, 98, 110, 66, 86, 74, 102, 86, 110, 107, 89, 52, 117, 51, 73, 106, + 107, 68, 89, 89, 76, 48, 77, 120, 79, 52, 109, 113, 115, 121, 89, 106, 108, 66, 97, + 108, 84, 86, 89, 120, 70, 80, 50, 115, 74, 66, 75, 53, 122, 108, 75, 79, 66, 10, + 117, 122, 67, 66, 117, 68, 65, 102, 66, 103, 78, 86, 72, 83, 77, 69, 71, 68, 65, + 87, 103, 66, 81, 105, 90, 81, 122, 87, 87, 112, 48, 48, 105, 102, 79, 68, 116, 74, + 86, 83, 118, 49, 65, 98, 79, 83, 99, 71, 114, 68, 66, 83, 66, 103, 78, 86, 72, 82, + 56, 69, 83, 122, 66, 74, 10, 77, 69, 101, 103, 82, 97, 66, 68, 104, 107, 70, 111, + 100, 72, 82, 119, 99, 122, 111, 118, 76, 50, 78, 108, 99, 110, 82, 112, 90, 109, + 108, 106, 89, 88, 82, 108, 99, 121, 53, 48, 99, 110, 86, 122, 100, 71, 86, 107, 99, + 50, 86, 121, 100, 109, 108, 106, 90, 88, 77, 117, 97, 87, 53, 48, 10, 90, 87, 119, + 117, 89, 50, 57, 116, 76, 48, 108, 117, 100, 71, 86, 115, 85, 48, 100, 89, 85, 109, + 57, 118, 100, 69, 78, 66, 76, 109, 82, 108, 99, 106, 65, 100, 66, 103, 78, 86, 72, + 81, 52, 69, 70, 103, 81, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, + 103, 55, 83, 86, 10, 85, 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 68, + 103, 89, 68, 86, 82, 48, 80, 65, 81, 72, 47, 66, 65, 81, 68, 65, 103, 69, 71, 77, + 66, 73, 71, 65, 49, 85, 100, 69, 119, 69, 66, 47, 119, 81, 73, 77, 65, 89, 66, 65, + 102, 56, 67, 65, 81, 69, 119, 67, 103, 89, 73, 10, 75, 111, 90, 73, 122, 106, 48, + 69, 65, 119, 73, 68, 83, 81, 65, 119, 82, 103, 73, 104, 65, 79, 87, 47, 53, 81, + 107, 82, 43, 83, 57, 67, 105, 83, 68, 99, 78, 111, 111, 119, 76, 117, 80, 82, 76, + 115, 87, 71, 102, 47, 89, 105, 55, 71, 83, 88, 57, 52, 66, 103, 119, 84, 119, 103, + 10, 65, 105, 69, 65, 52, 74, 48, 108, 114, 72, 111, 77, 115, 43, 88, 111, 53, 111, + 47, 115, 88, 54, 79, 57, 81, 87, 120, 72, 82, 65, 118, 90, 85, 71, 79, 100, 82, 81, + 55, 99, 118, 113, 82, 88, 97, 113, 73, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, + 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 0, + }, + TcbInfo: []byte{ + 123, 34, 116, 99, 98, 73, 110, 102, 111, 34, 58, 123, 34, 118, 101, 114, 115, 105, + 111, 110, 34, 58, 50, 44, 34, 105, 115, 115, 117, 101, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 51, 45, 48, 53, 45, 48, 57, 84, 49, 50, 58, 52, 54, 58, 49, 55, 90, + 34, 44, 34, 110, 101, 120, 116, 85, 112, 100, 97, 116, 101, 34, 58, 34, 50, 48, 50, + 51, 45, 48, 54, 45, 48, 56, 84, 49, 50, 58, 52, 54, 58, 49, 55, 90, 34, 44, 34, + 102, 109, 115, 112, 99, 34, 58, 34, 48, 48, 55, 48, 54, 69, 52, 55, 48, 48, 48, 48, + 34, 44, 34, 112, 99, 101, 73, 100, 34, 58, 34, 48, 48, 48, 48, 34, 44, 34, 116, 99, + 98, 84, 121, 112, 101, 34, 58, 48, 44, 34, 116, 99, 98, 69, 118, 97, 108, 117, 97, + 116, 105, 111, 110, 68, 97, 116, 97, 78, 117, 109, 98, 101, 114, 34, 58, 49, 53, + 44, 34, 116, 99, 98, 76, 101, 118, 101, 108, 115, 34, 58, 91, 123, 34, 116, 99, 98, + 34, 58, 123, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, + 110, 34, 58, 49, 54, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, + 115, 118, 110, 34, 58, 49, 54, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 51, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 49, 50, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 49, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 49, 50, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 49, 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, + 44, 34, 112, 99, 101, 115, 118, 110, 34, 58, 49, 51, 125, 44, 34, 116, 99, 98, 68, + 97, 116, 101, 34, 58, 34, 50, 48, 50, 51, 45, 48, 50, 45, 49, 53, 84, 48, 48, 58, + 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, + 58, 34, 83, 87, 72, 97, 114, 100, 101, 110, 105, 110, 103, 78, 101, 101, 100, 101, + 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 54, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, 58, 49, 54, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, 118, 110, 34, 58, 50, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 52, 115, 118, 110, 34, + 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 53, 115, 118, + 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 54, + 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, 118, 110, 34, 58, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 51, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 52, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 53, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, 115, 118, 110, 34, 58, 49, + 51, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 50, 51, 45, 48, + 50, 45, 49, 53, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, + 83, 116, 97, 116, 117, 115, 34, 58, 34, 67, 111, 110, 102, 105, 103, 117, 114, 97, + 116, 105, 111, 110, 65, 110, 100, 83, 87, 72, 97, 114, 100, 101, 110, 105, 110, + 103, 78, 101, 101, 100, 101, 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, + 49, 53, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, + 110, 34, 58, 49, 53, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, + 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 48, 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 49, 50, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 51, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 50, 45, 49, 49, 45, 48, 57, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 53, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, + 58, 49, 53, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 51, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 50, 45, 49, 49, 45, 48, 57, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, + 110, 78, 101, 101, 100, 101, 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, + 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, + 110, 34, 58, 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, + 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 48, 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 52, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 49, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 49, 45, 49, 49, 45, 49, 48, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, + 58, 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 52, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 48, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 48, 45, 49, 49, 45, 49, 49, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, + 58, 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 49, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 49, 45, 49, 49, 45, 49, 48, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, + 110, 78, 101, 101, 100, 101, 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, + 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, + 110, 34, 58, 49, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, + 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 48, 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 48, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 48, 45, 49, 49, 45, 49, 49, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, + 110, 78, 101, 101, 100, 101, 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, + 54, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, + 34, 58, 54, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 52, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 52, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 51, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, + 115, 118, 110, 34, 58, 49, 48, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 48, 45, 48, 54, 45, 49, 48, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, + 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, + 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 54, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, 58, + 54, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, 118, 110, + 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 52, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 51, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, 115, 118, + 110, 34, 58, 49, 48, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, + 48, 50, 48, 45, 48, 54, 45, 49, 48, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, + 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, + 97, 116, 101, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 78, + 101, 101, 100, 101, 100, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 52, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, 58, + 52, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, 118, 110, + 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 52, 115, + 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 53, 115, 118, 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 54, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 51, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, + 52, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 49, 53, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, 115, 118, + 110, 34, 58, 57, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, + 49, 57, 45, 49, 49, 45, 49, 51, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, + 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, + 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, 58, 49, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, 118, 110, 34, 58, 50, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 52, 115, 118, 110, 34, + 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 53, 115, 118, + 110, 34, 58, 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 54, + 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 48, 55, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, + 109, 112, 48, 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, + 99, 111, 109, 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, + 99, 98, 99, 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, + 120, 116, 99, 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, 34, 58, 48, 44, 34, + 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, 118, 110, 34, 58, 48, + 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 51, 115, 118, 110, 34, + 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 52, 115, 118, + 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 53, + 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, + 49, 54, 115, 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, 115, 118, 110, 34, 58, 55, + 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 49, 57, 45, 48, 53, + 45, 49, 53, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, + 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, + 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 48, 49, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 48, 50, 115, 118, 110, 34, 58, 49, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 48, 51, 115, 118, 110, 34, 58, 50, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 52, 115, 118, 110, 34, 58, 50, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 53, 115, 118, 110, 34, 58, + 50, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 54, 115, 118, 110, + 34, 58, 49, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, 55, 115, + 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 48, + 56, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, + 112, 48, 57, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, + 111, 109, 112, 49, 48, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, + 98, 99, 111, 109, 112, 49, 49, 115, 118, 110, 34, 58, 48, 44, 34, 115, 103, 120, + 116, 99, 98, 99, 111, 109, 112, 49, 50, 115, 118, 110, 34, 58, 48, 44, 34, 115, + 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 51, 115, 118, 110, 34, 58, 48, 44, + 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 52, 115, 118, 110, 34, 58, + 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 53, 115, 118, 110, + 34, 58, 48, 44, 34, 115, 103, 120, 116, 99, 98, 99, 111, 109, 112, 49, 54, 115, + 118, 110, 34, 58, 48, 44, 34, 112, 99, 101, 115, 118, 110, 34, 58, 54, 125, 44, 34, + 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 49, 56, 45, 48, 56, 45, 49, 53, + 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, + 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, 125, 93, 125, + 44, 34, 115, 105, 103, 110, 97, 116, 117, 114, 101, 34, 58, 34, 99, 98, 99, 55, 50, + 51, 100, 55, 50, 102, 102, 49, 100, 54, 53, 48, 49, 101, 102, 97, 97, 52, 54, 48, + 49, 98, 98, 100, 52, 56, 100, 50, 50, 50, 98, 55, 56, 50, 52, 53, 97, 50, 100, 51, + 98, 101, 101, 55, 51, 102, 54, 54, 53, 100, 97, 97, 48, 49, 54, 56, 99, 53, 102, + 99, 56, 99, 57, 102, 54, 53, 98, 53, 99, 57, 100, 100, 101, 57, 102, 101, 56, 48, + 48, 49, 102, 100, 57, 56, 48, 55, 57, 56, 98, 101, 99, 52, 102, 97, 97, 97, 51, 53, + 54, 99, 48, 55, 53, 49, 53, 55, 55, 49, 49, 97, 98, 57, 99, 101, 100, 101, 101, 52, + 99, 51, 57, 48, 56, 101, 34, 125, 0, + }, + QeIdentityIssuerChain: []byte{ + 45, 45, 45, 45, 45, 66, 69, 71, 73, 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, + 69, 45, 45, 45, 45, 45, 10, 77, 73, 73, 67, 105, 122, 67, 67, 65, 106, 75, 103, 65, + 119, 73, 66, 65, 103, 73, 85, 102, 106, 105, 67, 49, 102, 116, 86, 75, 85, 112, 65, + 83, 89, 53, 70, 104, 65, 80, 112, 70, 74, 71, 57, 57, 70, 85, 119, 67, 103, 89, 73, + 75, 111, 90, 73, 122, 106, 48, 69, 65, 119, 73, 119, 10, 97, 68, 69, 97, 77, 66, + 103, 71, 65, 49, 85, 69, 65, 119, 119, 82, 83, 87, 53, 48, 90, 87, 119, 103, 85, + 48, 100, 89, 73, 70, 74, 118, 98, 51, 81, 103, 81, 48, 69, 120, 71, 106, 65, 89, + 66, 103, 78, 86, 66, 65, 111, 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, 69, 78, + 118, 10, 99, 110, 66, 118, 99, 109, 70, 48, 97, 87, 57, 117, 77, 82, 81, 119, 69, + 103, 89, 68, 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, 53, 48, 89, 83, 66, 68, 98, + 71, 70, 121, 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, 85, 69, 67, 65, 119, 67, 81, + 48, 69, 120, 67, 122, 65, 74, 10, 66, 103, 78, 86, 66, 65, 89, 84, 65, 108, 86, 84, + 77, 66, 52, 88, 68, 84, 69, 52, 77, 68, 85, 121, 77, 84, 69, 119, 78, 84, 65, 120, + 77, 70, 111, 88, 68, 84, 73, 49, 77, 68, 85, 121, 77, 84, 69, 119, 78, 84, 65, 120, + 77, 70, 111, 119, 98, 68, 69, 101, 77, 66, 119, 71, 10, 65, 49, 85, 69, 65, 119, + 119, 86, 83, 87, 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, 73, 70, 82, 68, 81, + 105, 66, 84, 97, 87, 100, 117, 97, 87, 53, 110, 77, 82, 111, 119, 71, 65, 89, 68, + 86, 81, 81, 75, 68, 66, 70, 74, 98, 110, 82, 108, 98, 67, 66, 68, 98, 51, 74, 119, + 10, 98, 51, 74, 104, 100, 71, 108, 118, 98, 106, 69, 85, 77, 66, 73, 71, 65, 49, + 85, 69, 66, 119, 119, 76, 85, 50, 70, 117, 100, 71, 69, 103, 81, 50, 120, 104, 99, + 109, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, 103, 77, 65, 107, 78, 66, + 77, 81, 115, 119, 67, 81, 89, 68, 10, 86, 81, 81, 71, 69, 119, 74, 86, 85, 122, 66, + 90, 77, 66, 77, 71, 66, 121, 113, 71, 83, 77, 52, 57, 65, 103, 69, 71, 67, 67, 113, + 71, 83, 77, 52, 57, 65, 119, 69, 72, 65, 48, 73, 65, 66, 69, 78, 70, 71, 56, 120, + 122, 121, 100, 87, 82, 102, 75, 57, 50, 98, 109, 71, 118, 10, 80, 43, 109, 65, 104, + 57, 49, 80, 69, 121, 86, 55, 74, 104, 54, 70, 71, 74, 100, 53, 110, 100, 69, 57, + 97, 66, 72, 55, 82, 51, 69, 52, 65, 55, 117, 98, 114, 108, 104, 47, 122, 78, 51, + 67, 52, 120, 118, 112, 111, 111, 117, 71, 108, 105, 114, 77, 98, 97, 43, 87, 50, + 108, 106, 117, 10, 121, 112, 97, 106, 103, 98, 85, 119, 103, 98, 73, 119, 72, 119, + 89, 68, 86, 82, 48, 106, 66, 66, 103, 119, 70, 111, 65, 85, 73, 109, 85, 77, 49, + 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, 85, 114, 57, 81, 71, 122, 107, + 110, 66, 113, 119, 119, 85, 103, 89, 68, 86, 82, 48, 102, 10, 66, 69, 115, 119, 83, + 84, 66, 72, 111, 69, 87, 103, 81, 52, 90, 66, 97, 72, 82, 48, 99, 72, 77, 54, 76, + 121, 57, 106, 90, 88, 74, 48, 97, 87, 90, 112, 89, 50, 70, 48, 90, 88, 77, 117, + 100, 72, 74, 49, 99, 51, 82, 108, 90, 72, 78, 108, 99, 110, 90, 112, 89, 50, 86, + 122, 10, 76, 109, 108, 117, 100, 71, 86, 115, 76, 109, 78, 118, 98, 83, 57, 74, 98, + 110, 82, 108, 98, 70, 78, 72, 87, 70, 74, 118, 98, 51, 82, 68, 81, 83, 53, 107, 90, + 88, 73, 119, 72, 81, 89, 68, 86, 82, 48, 79, 66, 66, 89, 69, 70, 72, 52, 52, 103, + 116, 88, 55, 86, 83, 108, 75, 10, 81, 69, 109, 79, 82, 89, 81, 68, 54, 82, 83, 82, + 118, 102, 82, 86, 77, 65, 52, 71, 65, 49, 85, 100, 68, 119, 69, 66, 47, 119, 81, + 69, 65, 119, 73, 71, 119, 68, 65, 77, 66, 103, 78, 86, 72, 82, 77, 66, 65, 102, 56, + 69, 65, 106, 65, 65, 77, 65, 111, 71, 67, 67, 113, 71, 10, 83, 77, 52, 57, 66, 65, + 77, 67, 65, 48, 99, 65, 77, 69, 81, 67, 73, 66, 57, 67, 56, 119, 79, 65, 78, 47, + 73, 109, 120, 68, 116, 71, 65, 67, 86, 50, 52, 54, 75, 99, 113, 106, 97, 103, 90, + 79, 82, 48, 107, 121, 99, 116, 121, 66, 114, 115, 71, 71, 74, 86, 65, 105, 65, 106, + 10, 102, 116, 98, 114, 78, 71, 115, 71, 85, 56, 89, 72, 50, 49, 49, 100, 82, 105, + 89, 78, 111, 80, 80, 117, 49, 57, 90, 112, 47, 122, 101, 56, 74, 109, 104, 117, + 106, 66, 48, 111, 66, 119, 61, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, 67, 69, + 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 45, 45, 45, 45, 45, 66, + 69, 71, 73, 78, 32, 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, + 10, 77, 73, 73, 67, 106, 122, 67, 67, 65, 106, 83, 103, 65, 119, 73, 66, 65, 103, + 73, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, 103, 55, 83, 86, 85, + 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 67, 103, 89, 73, 75, 111, 90, + 73, 122, 106, 48, 69, 65, 119, 73, 119, 10, 97, 68, 69, 97, 77, 66, 103, 71, 65, + 49, 85, 69, 65, 119, 119, 82, 83, 87, 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, + 73, 70, 74, 118, 98, 51, 81, 103, 81, 48, 69, 120, 71, 106, 65, 89, 66, 103, 78, + 86, 66, 65, 111, 77, 69, 85, 108, 117, 100, 71, 86, 115, 73, 69, 78, 118, 10, 99, + 110, 66, 118, 99, 109, 70, 48, 97, 87, 57, 117, 77, 82, 81, 119, 69, 103, 89, 68, + 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, 53, 48, 89, 83, 66, 68, 98, 71, 70, 121, + 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, 85, 69, 67, 65, 119, 67, 81, 48, 69, 120, + 67, 122, 65, 74, 10, 66, 103, 78, 86, 66, 65, 89, 84, 65, 108, 86, 84, 77, 66, 52, + 88, 68, 84, 69, 52, 77, 68, 85, 121, 77, 84, 69, 119, 78, 68, 85, 120, 77, 70, 111, + 88, 68, 84, 81, 53, 77, 84, 73, 122, 77, 84, 73, 122, 78, 84, 107, 49, 79, 86, 111, + 119, 97, 68, 69, 97, 77, 66, 103, 71, 10, 65, 49, 85, 69, 65, 119, 119, 82, 83, 87, + 53, 48, 90, 87, 119, 103, 85, 48, 100, 89, 73, 70, 74, 118, 98, 51, 81, 103, 81, + 48, 69, 120, 71, 106, 65, 89, 66, 103, 78, 86, 66, 65, 111, 77, 69, 85, 108, 117, + 100, 71, 86, 115, 73, 69, 78, 118, 99, 110, 66, 118, 99, 109, 70, 48, 10, 97, 87, + 57, 117, 77, 82, 81, 119, 69, 103, 89, 68, 86, 81, 81, 72, 68, 65, 116, 84, 89, 87, + 53, 48, 89, 83, 66, 68, 98, 71, 70, 121, 89, 84, 69, 76, 77, 65, 107, 71, 65, 49, + 85, 69, 67, 65, 119, 67, 81, 48, 69, 120, 67, 122, 65, 74, 66, 103, 78, 86, 66, 65, + 89, 84, 10, 65, 108, 86, 84, 77, 70, 107, 119, 69, 119, 89, 72, 75, 111, 90, 73, + 122, 106, 48, 67, 65, 81, 89, 73, 75, 111, 90, 73, 122, 106, 48, 68, 65, 81, 99, + 68, 81, 103, 65, 69, 67, 54, 110, 69, 119, 77, 68, 73, 89, 90, 79, 106, 47, 105, + 80, 87, 115, 67, 122, 97, 69, 75, 105, 55, 10, 49, 79, 105, 79, 83, 76, 82, 70, + 104, 87, 71, 106, 98, 110, 66, 86, 74, 102, 86, 110, 107, 89, 52, 117, 51, 73, 106, + 107, 68, 89, 89, 76, 48, 77, 120, 79, 52, 109, 113, 115, 121, 89, 106, 108, 66, 97, + 108, 84, 86, 89, 120, 70, 80, 50, 115, 74, 66, 75, 53, 122, 108, 75, 79, 66, 10, + 117, 122, 67, 66, 117, 68, 65, 102, 66, 103, 78, 86, 72, 83, 77, 69, 71, 68, 65, + 87, 103, 66, 81, 105, 90, 81, 122, 87, 87, 112, 48, 48, 105, 102, 79, 68, 116, 74, + 86, 83, 118, 49, 65, 98, 79, 83, 99, 71, 114, 68, 66, 83, 66, 103, 78, 86, 72, 82, + 56, 69, 83, 122, 66, 74, 10, 77, 69, 101, 103, 82, 97, 66, 68, 104, 107, 70, 111, + 100, 72, 82, 119, 99, 122, 111, 118, 76, 50, 78, 108, 99, 110, 82, 112, 90, 109, + 108, 106, 89, 88, 82, 108, 99, 121, 53, 48, 99, 110, 86, 122, 100, 71, 86, 107, 99, + 50, 86, 121, 100, 109, 108, 106, 90, 88, 77, 117, 97, 87, 53, 48, 10, 90, 87, 119, + 117, 89, 50, 57, 116, 76, 48, 108, 117, 100, 71, 86, 115, 85, 48, 100, 89, 85, 109, + 57, 118, 100, 69, 78, 66, 76, 109, 82, 108, 99, 106, 65, 100, 66, 103, 78, 86, 72, + 81, 52, 69, 70, 103, 81, 85, 73, 109, 85, 77, 49, 108, 113, 100, 78, 73, 110, 122, + 103, 55, 83, 86, 10, 85, 114, 57, 81, 71, 122, 107, 110, 66, 113, 119, 119, 68, + 103, 89, 68, 86, 82, 48, 80, 65, 81, 72, 47, 66, 65, 81, 68, 65, 103, 69, 71, 77, + 66, 73, 71, 65, 49, 85, 100, 69, 119, 69, 66, 47, 119, 81, 73, 77, 65, 89, 66, 65, + 102, 56, 67, 65, 81, 69, 119, 67, 103, 89, 73, 10, 75, 111, 90, 73, 122, 106, 48, + 69, 65, 119, 73, 68, 83, 81, 65, 119, 82, 103, 73, 104, 65, 79, 87, 47, 53, 81, + 107, 82, 43, 83, 57, 67, 105, 83, 68, 99, 78, 111, 111, 119, 76, 117, 80, 82, 76, + 115, 87, 71, 102, 47, 89, 105, 55, 71, 83, 88, 57, 52, 66, 103, 119, 84, 119, 103, + 10, 65, 105, 69, 65, 52, 74, 48, 108, 114, 72, 111, 77, 115, 43, 88, 111, 53, 111, + 47, 115, 88, 54, 79, 57, 81, 87, 120, 72, 82, 65, 118, 90, 85, 71, 79, 100, 82, 81, + 55, 99, 118, 113, 82, 88, 97, 113, 73, 61, 10, 45, 45, 45, 45, 45, 69, 78, 68, 32, + 67, 69, 82, 84, 73, 70, 73, 67, 65, 84, 69, 45, 45, 45, 45, 45, 10, 0, + }, + QeIdentity: []byte{ + 123, 34, 101, 110, 99, 108, 97, 118, 101, 73, 100, 101, 110, 116, 105, 116, 121, + 34, 58, 123, 34, 105, 100, 34, 58, 34, 81, 69, 34, 44, 34, 118, 101, 114, 115, 105, + 111, 110, 34, 58, 50, 44, 34, 105, 115, 115, 117, 101, 68, 97, 116, 101, 34, 58, + 34, 50, 48, 50, 51, 45, 48, 53, 45, 48, 57, 84, 49, 49, 58, 52, 55, 58, 48, 56, 90, + 34, 44, 34, 110, 101, 120, 116, 85, 112, 100, 97, 116, 101, 34, 58, 34, 50, 48, 50, + 51, 45, 48, 54, 45, 48, 56, 84, 49, 49, 58, 52, 55, 58, 48, 56, 90, 34, 44, 34, + 116, 99, 98, 69, 118, 97, 108, 117, 97, 116, 105, 111, 110, 68, 97, 116, 97, 78, + 117, 109, 98, 101, 114, 34, 58, 49, 53, 44, 34, 109, 105, 115, 99, 115, 101, 108, + 101, 99, 116, 34, 58, 34, 48, 48, 48, 48, 48, 48, 48, 48, 34, 44, 34, 109, 105, + 115, 99, 115, 101, 108, 101, 99, 116, 77, 97, 115, 107, 34, 58, 34, 70, 70, 70, 70, + 70, 70, 70, 70, 34, 44, 34, 97, 116, 116, 114, 105, 98, 117, 116, 101, 115, 34, 58, + 34, 49, 49, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 34, 44, 34, 97, 116, 116, 114, 105, + 98, 117, 116, 101, 115, 77, 97, 115, 107, 34, 58, 34, 70, 66, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 34, 44, 34, 109, 114, 115, 105, 103, 110, 101, 114, 34, 58, 34, 56, + 67, 52, 70, 53, 55, 55, 53, 68, 55, 57, 54, 53, 48, 51, 69, 57, 54, 49, 51, 55, 70, + 55, 55, 67, 54, 56, 65, 56, 50, 57, 65, 48, 48, 53, 54, 65, 67, 56, 68, 69, 68, 55, + 48, 49, 52, 48, 66, 48, 56, 49, 66, 48, 57, 52, 52, 57, 48, 67, 53, 55, 66, 70, 70, + 34, 44, 34, 105, 115, 118, 112, 114, 111, 100, 105, 100, 34, 58, 49, 44, 34, 116, + 99, 98, 76, 101, 118, 101, 108, 115, 34, 58, 91, 123, 34, 116, 99, 98, 34, 58, 123, + 34, 105, 115, 118, 115, 118, 110, 34, 58, 56, 125, 44, 34, 116, 99, 98, 68, 97, + 116, 101, 34, 58, 34, 50, 48, 50, 51, 45, 48, 50, 45, 49, 53, 84, 48, 48, 58, 48, + 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, 58, + 34, 85, 112, 84, 111, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, 34, 58, + 123, 34, 105, 115, 118, 115, 118, 110, 34, 58, 54, 125, 44, 34, 116, 99, 98, 68, + 97, 116, 101, 34, 58, 34, 50, 48, 50, 49, 45, 49, 49, 45, 49, 48, 84, 48, 48, 58, + 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, 115, 34, + 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, 116, 99, 98, + 34, 58, 123, 34, 105, 115, 118, 115, 118, 110, 34, 58, 53, 125, 44, 34, 116, 99, + 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 50, 48, 45, 49, 49, 45, 49, 49, 84, 48, + 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, 116, 117, + 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, 125, 44, 123, 34, + 116, 99, 98, 34, 58, 123, 34, 105, 115, 118, 115, 118, 110, 34, 58, 52, 125, 44, + 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 49, 57, 45, 49, 49, 45, 49, + 51, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, 116, 97, + 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, 125, 44, + 123, 34, 116, 99, 98, 34, 58, 123, 34, 105, 115, 118, 115, 118, 110, 34, 58, 50, + 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 49, 57, 45, 48, 53, + 45, 49, 53, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, 98, 83, + 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, 101, 34, + 125, 44, 123, 34, 116, 99, 98, 34, 58, 123, 34, 105, 115, 118, 115, 118, 110, 34, + 58, 49, 125, 44, 34, 116, 99, 98, 68, 97, 116, 101, 34, 58, 34, 50, 48, 49, 56, 45, + 48, 56, 45, 49, 53, 84, 48, 48, 58, 48, 48, 58, 48, 48, 90, 34, 44, 34, 116, 99, + 98, 83, 116, 97, 116, 117, 115, 34, 58, 34, 79, 117, 116, 79, 102, 68, 97, 116, + 101, 34, 125, 93, 125, 44, 34, 115, 105, 103, 110, 97, 116, 117, 114, 101, 34, 58, + 34, 51, 53, 98, 102, 56, 48, 100, 49, 53, 57, 53, 97, 53, 54, 56, 99, 102, 51, 101, + 102, 51, 101, 102, 56, 100, 97, 55, 100, 49, 50, 97, 51, 53, 100, 49, 97, 101, 101, + 102, 102, 98, 55, 102, 50, 52, 57, 48, 55, 98, 55, 54, 53, 50, 57, 48, 97, 99, 52, + 55, 100, 100, 57, 97, 53, 56, 102, 54, 55, 53, 51, 52, 98, 56, 50, 101, 56, 100, + 102, 102, 99, 52, 98, 99, 48, 100, 100, 99, 51, 54, 53, 50, 99, 51, 49, 102, 50, + 102, 100, 54, 57, 97, 99, 52, 52, 55, 102, 56, 52, 49, 52, 97, 49, 99, 48, 50, 99, + 54, 99, 49, 101, 53, 50, 102, 56, 53, 57, 48, 51, 34, 125, 0, + }, + } + + var jsonQuoteBlob = []byte(`{"version":[3,0],"key_type":[2,0],"reserved":[0,0,0,0],"qe_svn":[9,0],"pce_svn":[14,0],"qe_vendor_id":[147,154,114,51,247,156,76,169,148,10,13,179,149,127,6,7],"user_data":[70,114,7,119,123,42,86,223,162,177,14,221,32,22,13,93,0,0,0,0],"report_body":{"cpusvn":[11,15,255,255,255,255,12,0,0,0,0,0,0,0,0,0],"miscselect":[1,0,0,0],"reserved1":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"features":[5,0,0,0,0,0,0,0],"xfrm":[231,0,0,0,0,0,0,0],"mrenclave":[177,171,53,110,160,110,83,37,174,22,125,41,11,58,102,182,27,137,121,209,46,107,189,90,151,243,133,114,192,50,56,162],"reserved2":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"mrsigner":[41,128,55,216,135,130,224,34,224,25,179,2,7,69,183,138,164,14,217,92,119,218,75,247,243,37,61,58,68,196,253,126],"reserved3":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"isv_prodid":[0,0],"isv_svn":[0,0],"reserved4":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reportdata":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]}}`) + var expectedQuote Quote + err := json.Unmarshal(jsonQuoteBlob, &expectedQuote) + req.Nil(err) + + var expectedExpirationDate = time.Date(2023, 6, 8, 11, 47, 8, 0, time.UTC).Unix() + var expirationCheckDate = expectedExpirationDate - 1 + + result, err := SgxVerifyRemoteReportCollateral(quote, collateral, expirationCheckDate) + req.Nil(err) + req.Equal(SgxQlQvResultOutOfDate, result.VerificationResult) + req.Equal(expectedExpirationDate, result.EarliestExpirationDate) + req.False(result.CollateralExpired) + req.Equal(expectedQuote, result.Quote) +} + +func TestVerifyVault(t *testing.T) { + var req = require.New(t) + + quoteBase64 := "AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GB2A9AU1uxwxpErEhhnbcltYAAAAACwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAADnAAAAAAAAAF+P5MIpYKypxY38sYZ0O1MggnZsK0TRL9H0Y+/ke8jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVInOVZJGs3ffGsS5b/uD0A5Wy1YcOSrxrXOpvFjTueQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxhAAAG4N4TrivE3ZSzp1ebhaqA1/9kSI4+VYvovP2VkWT9RRnPZI1qrH9OlacPjd4mWHM2l18gcJ3l8dBPaN5ljYE3a/ptkyoG99YfjwdzdsURZQvQCidBDdhrt1kcr+7HwTFcf1hbifB13klNa6Npsm5sc7SMgVXrVM98+zCj0+jTleCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLZrH69IGHR4/H2DCpkrZPl4lJ7yWZvpARseCwUJ/wmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtFW25zzm18q1Fv35UheNU0t33YtUDzLKe6Q6PfP5vFqjiqVMI0v6o+r6ALG+IqlxR3Kjyr++kBep4ETwgge8diAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAF4OAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThUQ0NCSmlnQXdJQkFnSVVEMkNQQzRleDNQcnB6UE9YRXBuVTIrNDMzYm93Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOVEV3TWpBeU5EVTJXaGNOTXpBd05URXdNakF5TkRVMgpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkR1ZQpDOFl2L1JnZ2V5cnV5cWpmUlhydk1ZRjBoUnhRd1dueW9oVXQvd2VjeUxlL2YyREdZSGk1RlNGLzZnUmlTOC9WCjZiYld6bXEycTBsZm9Mei9hMEdqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGSi95dmhxV0lBd0prOTJIbXpjSWtreWcKMUFDQU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUXFmNzBJOGRnYksweGVtaEY0TExIM3pDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUUtEbyt6dWdoCjhaY0xBME9hM3BSa2REQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEUndBdwpSQUlnRHBmZFptVE5IYnVRaFE0c0ZMSnZ5czIzY2ZxdWR1ODBZcUlEVm5ud2NPRUNJRmhUMFF2R2xqS1FSM2NvClBqOGhoSFQ5anVWYXFkM1RydE1YRDFQZEhZWHYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=" + t.Log("Quote: " + quoteBase64) + quote, err := base64.StdEncoding.DecodeString(quoteBase64) + req.Nil(err) + + var expectedExpirationDate = time.Date(2023, 6, 27, 21, 30, 32, 0, time.UTC).Unix() + var expirationCheckDate = expectedExpirationDate - 1 + + var jsonCollateralBlob = []byte("{\"major_version\":1,\"minor_version\":0,\"tee_type\":0,\"pck_crl_issuer_chain\":\"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNsakNDQWoyZ0F3SUJBZ0lWQUpWdlhjMjlHK0hwUUVuSjFQUXp6Z0ZYQzk1VU1Bb0dDQ3FHU000OUJBTUMKTUdneEdqQVlCZ05WQkFNTUVVbHVkR1ZzSUZOSFdDQlNiMjkwSUVOQk1Sb3dHQVlEVlFRS0RCRkpiblJsYkNCRApiM0p3YjNKaGRHbHZiakVVTUJJR0ExVUVCd3dMVTJGdWRHRWdRMnhoY21FeEN6QUpCZ05WQkFnTUFrTkJNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4T0RBMU1qRXhNRFV3TVRCYUZ3MHpNekExTWpFeE1EVXdNVEJhTUhBeElqQWcKQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWcwpJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4CkN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOU0IvN3QyMWxYU08KMkN1enB4dzc0ZUpCNzJFeURHZ1c1clhDdHgydFZUTHE2aEtrNnorVWlSWkNucVI3cHNPdmdxRmVTeGxtVGxKbAplVG1pMldZejNxT0J1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTCkJnTlZIUjhFU3pCSk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnkKZG1salpYTXVhVzUwWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVbFc5ZAp6YjBiNGVsQVNjblU5RFBPQVZjTDNsUXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWHNWa2kwdytpNlZZR1czVUYvMjJ1YVhlMFlKRGoxVWUKbkErVGpEMWFpNWNDSUNZYjFTQW1ENXhrZlRWcHZvNFVveWlTWXhyRFdMbVVSNENJOU5LeWZQTisKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA\",\"root_ca_crl\":\"LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCk1JSUJJVENCeUFJQkFUQUtCZ2dxaGtqT1BRUURBakJvTVJvd0dBWURWUVFEREJGSmJuUmxiQ0JUUjFnZ1VtOXYKZENCRFFURWFNQmdHQTFVRUNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVkJBY01DMU5oYm5SaApJRU5zWVhKaE1Rc3dDUVlEVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNWERUSXpNRFF3TXpFd01qSTFNVm9YCkRUSTBNRFF3TWpFd01qSTFNVnFnTHpBdE1Bb0dBMVVkRkFRREFnRUJNQjhHQTFVZEl3UVlNQmFBRkNKbEROWmEKblRTSjg0TzBsVksvVUJzNUp3YXNNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJRkZYZlVmWis2Rlh0bDhldGZSbAplN3hlVnN5dmMxb0Q4YmxqMXdTQVdyRVlBaUVBazVBVjdCWTI1K3I2WDBKc0hrQW1SOFp6RXl0b1VNcTlhTTcyCnV0ZG9LZ009Ci0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KAA==\",\"pck_crl\":\"LS0tLS1CRUdJTiBYNTA5IENSTC0tLS0tCk1JSUtZekNDQ2dnQ0FRRXdDZ1lJS29aSXpqMEVBd0l3Y0RFaU1DQUdBMVVFQXd3WlNXNTBaV3dnVTBkWUlGQkQKU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1JTVzUwWld3Z1EyOXljRzl5WVhScGIyNHhGREFTQmdOVgpCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSURBSkRRVEVMTUFrR0ExVUVCaE1DVlZNWERUSXpNRFV5Ck9ESXhNekF6TWxvWERUSXpNRFl5TnpJeE16QXpNbG93Z2drME1ETUNGRy9EVGxBajV5aVNORFhXR3FTNFBHR0IKWnEwMUZ3MHlNekExTWpneU1UTXdNekphTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQU8rdWJwY1YvS0U3aCtNego2Q1llMXRtUXFTYXRGdzB5TXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TkFJVkFQMWdoa2hpCm5McHpCNHROU1M5TFBxZEJyUWpORncweU16QTFNamd5TVRNd016SmFNQXd3Q2dZRFZSMFZCQU1LQVFFd05BSVYKQUlyNUpCaE9IVnI5M1hQRDFqb1M5ZWkxYzM1V0Z3MHlNekExTWpneU1UTXdNekphTUF3d0NnWURWUjBWQkFNSwpBUUV3TkFJVkFMRWxlWGpQcWN6ZEIxbXIrTVhLY3ZyanA0cWJGdzB5TXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEClZSMFZCQU1LQVFFd013SVVkUDZtRktseXZnNG9RL0lGbURXQkh0aHkrYk1YRFRJek1EVXlPREl4TXpBek1sb3cKRERBS0JnTlZIUlVFQXdvQkFUQTBBaFVBK2NUdlZyT3JTTlYzNFFpNjdmUy9pQUZDRkxrWERUSXpNRFV5T0RJeApNekF6TWxvd0REQUtCZ05WSFJVRUF3b0JBVEF6QWhRSEhlQjNqNTVmeFBLSGp6RFdzSHlhTU9hekN4Y05Nak13Ck5USTRNakV6TURNeVdqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRRE40a0pQbHl6cWxQOGptVGYwMkF3bEFwM1cKQ3hjTk1qTXdOVEk0TWpFek1ETXlXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUNGR3d6R2VVUW0yUlFmVHp4RXl6ZwpBMG52VW5NWkZ3MHlNekExTWpneU1UTXdNekphTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQU44STExYTJhblNYCjlEdGJ0WXJhQk5QMDk2azNGdzB5TXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVUtLOUkKVzJ6MmZrQ2FPZFhMV3U1Rm1QZW8rbnNYRFRJek1EVXlPREl4TXpBek1sb3dEREFLQmdOVkhSVUVBd29CQVRBMApBaFVBKzRzdHJzQ1N5dHFLcWJ4UDh2SENEUU5HWm93WERUSXpNRFV5T0RJeE16QXpNbG93RERBS0JnTlZIUlVFCkF3b0JBVEEwQWhVQXpVaFFyRks5ekdtbXB2Qll5THhYdTlDMStHUVhEVEl6TURVeU9ESXhNekF6TWxvd0REQUsKQmdOVkhSVUVBd29CQVRBMEFoVUFtVTNUWm05U2RmdUFYNVhkQXIxUXl5WjUySzBYRFRJek1EVXlPREl4TXpBegpNbG93RERBS0JnTlZIUlVFQXdvQkFUQXpBaFFIQWhOcEFDVWlkTmtEWHUzMVJYUmkrdER2VEJjTk1qTXdOVEk0Ck1qRXpNRE15V2pBTU1Bb0dBMVVkRlFRRENnRUJNRE1DRkdIeXYzUGptMDRFcWlmWUFiMXowa01adGIrQUZ3MHkKTXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVU9aSytoUnVXa0M3L09KV2ViQzcvR3daUgpwTFVYRFRJek1EVXlPREl4TXpBek1sb3dEREFLQmdOVkhSVUVBd29CQVRBekFoUmpueE9hVUVEOXovR1I2S1Q3CkcvQ0c3V0E1Y1JjTk1qTXdOVEk0TWpFek1ETXlXakFNTUFvR0ExVWRGUVFEQ2dFQk1EUUNGUUNWblZNL2trbmMKSGxFMVJNM0lNTDhadC9IekFSY05Nak13TlRJNE1qRXpNRE15V2pBTU1Bb0dBMVVkRlFRRENnRUJNRE1DRkEvYQpRNkFMYU9wNXQ4TGVycXdMU1l2ZnNxK1FGdzB5TXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3Ck5BSVZBSjFuZFR1QjVIQ1FycWRqKyt4TVJVbTgyNWt6RncweU16QTFNamd5TVRNd016SmFNQXd3Q2dZRFZSMFYKQkFNS0FRRXdNd0lVTkwrN2VoMmNWb0ZINFJpMkZQZTNidFB2YU44WERUSXpNRFV5T0RJeE16QXpNbG93RERBSwpCZ05WSFJVRUF3b0JBVEEwQWhVQWhkUEpPQnQzcCtCTkVaeWVXdFowbi9QL3E0Y1hEVEl6TURVeU9ESXhNekF6Ck1sb3dEREFLQmdOVkhSVUVBd29CQVRBMEFoVUFrNGg4cEVFZWVwSTcwZjdTZ1pzcFNmSUJ0YlFYRFRJek1EVXkKT0RJeE16QXpNbG93RERBS0JnTlZIUlVFQXdvQkFUQXpBaFFrbU54aWc1TUpsdjJMOGpvM3JMNG1vNzdVVnhjTgpNak13TlRJNE1qRXpNRE15V2pBTU1Bb0dBMVVkRlFRRENnRUJNRFFDRlFDS1p2R25TVWlHWjJpY3c1QTZ4VXhtCkszRXVjeGNOTWpNd05USTRNakV6TURNeVdqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRQ3Z3VFlRdmROc3Q1aGQKRUdTQnFJRFRvQi9hQnhjTk1qTXdOVEk0TWpFek1ETXlXakFNTUFvR0ExVWRGUVFEQ2dFQk1EUUNGUUR2NEVzcwpNOUEycXNsc3BuTy9IcHBIdGsxY3V4Y05Nak13TlRJNE1qRXpNRE15V2pBTU1Bb0dBMVVkRlFRRENnRUJNRFFDCkZRQ0QyYXlOaTdVSjBjYklDYTF4TG9Rd1ZaN1g4eGNOTWpNd05USTRNakV6TURNeVdqQU1NQW9HQTFVZEZRUUQKQ2dFQk1ETUNGSGt4L1ZDMUJ4d2J2OFczdHQ3WXRGdWRpNFVwRncweU16QTFNamd5TVRNd016SmFNQXd3Q2dZRApWUjBWQkFNS0FRRXdNd0lVSDZJT0tYQzk1ZFYvZTQzZmd6bElUaDhkQ0NNWERUSXpNRFV5T0RJeE16QXpNbG93CkREQUtCZ05WSFJVRUF3b0JBVEF6QWhRZWg3TERzeTJOSStRUnp2TkJsN2xhOE1pdDlSY05Nak13TlRJNE1qRXoKTURNeVdqQU1NQW9HQTFVZEZRUURDZ0VCTURRQ0ZRQ2EvUzdwQ2tjMVVLRm4yWmFSRkRmSFVDMGZDUmNOTWpNdwpOVEk0TWpFek1ETXlXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUNGRVNCc1BFWEtLRTdhVzArcWNkd29MRmV4WTNhCkZ3MHlNekExTWpneU1UTXdNekphTUF3d0NnWURWUjBWQkFNS0FRRXdOQUlWQUtlRm4xZVlMdkRtZlRlOGp2THYKV3NnMS94cXBGdzB5TXpBMU1qZ3lNVE13TXpKYU1Bd3dDZ1lEVlIwVkJBTUtBUUV3TXdJVWV1TjNTS241RXZURwpPNmVyQjhXVHpoMGRFWUVYRFRJek1EVXlPREl4TXpBek1sb3dEREFLQmdOVkhSVUVBd29CQVRBekFoUVRpRXN6CkpwazR3WldxRncvS2Rkb1hkVGpmQ3hjTk1qTXdOVEk0TWpFek1ETXlXakFNTUFvR0ExVWRGUVFEQ2dFQk1ETUMKRkN3OHh2NlNlZHNWRnRYT09mS29tTTJsb1hYaEZ3MHlNekExTWpneU1UTXdNekphTUF3d0NnWURWUjBWQkFNSwpBUUV3TXdJVWNYbElhSFVKSTB2cGVlUzMzT2J6Rys5a3Rvd1hEVEl6TURVeU9ESXhNekF6TWxvd0REQUtCZ05WCkhSVUVBd29CQVRBMEFoVUFuWGJ2TERuQk51aGxpMjV6bHJIWFJGb25ZeDhYRFRJek1EVXlPREl4TXpBek1sb3cKRERBS0JnTlZIUlVFQXdvQkFUQTBBaFVBdytBbC9LbVY4MjladElSbms1NCtOT1kyR204WERUSXpNRFV5T0RJeApNekF6TWxvd0REQUtCZ05WSFJVRUF3b0JBVEEwQWhVQWpGOXJNbGZhQmJGMEtlTG1HNmxsMW5Nd1lHb1hEVEl6Ck1EVXlPREl4TXpBek1sb3dEREFLQmdOVkhSVUVBd29CQVRBMEFoVUFvWHhSY2k3QjRNTW5qK2k5OEZJRm5MN0UKNWtnWERUSXpNRFV5T0RJeE16QXpNbG93RERBS0JnTlZIUlVFQXdvQkFhQXZNQzB3Q2dZRFZSMFVCQU1DQVFFdwpId1lEVlIwakJCZ3dGb0FVbFc5ZHpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTnhkNDZOcWtXN0RFTk1FUmlLZHpCM3FnWDJPRWFCS2U1NXNEZjU5V256NUFpRUFvMG5RUUllMGlOZFQKUWtqcWgvUGIzQjZpbVVoNFoyRWNSNTVwZlJZamVkdz0KLS0tLS1FTkQgWDUwOSBDUkwtLS0tLQoA\",\"tcb_info_issuer_chain\":\"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpekNDQWpLZ0F3SUJBZ0lVZmppQzFmdFZLVXBBU1k1RmhBUHBGSkc5OUZVd0NnWUlLb1pJemowRUF3SXcKYURFYU1CZ0dBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdgpjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKCkJnTlZCQVlUQWxWVE1CNFhEVEU0TURVeU1URXdOVEF4TUZvWERUSTFNRFV5TVRFd05UQXhNRm93YkRFZU1Cd0cKQTFVRUF3d1ZTVzUwWld3Z1UwZFlJRlJEUWlCVGFXZHVhVzVuTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JEYjNKdwpiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3dDUVlEClZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVORkc4eHp5ZFdSZks5MmJtR3YKUCttQWg5MVBFeVY3Smg2RkdKZDVuZEU5YUJIN1IzRTRBN3VicmxoL3pOM0M0eHZwb291R2xpck1iYStXMmxqdQp5cGFqZ2JVd2diSXdId1lEVlIwakJCZ3dGb0FVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3d1VnWURWUjBmCkJFc3dTVEJIb0VXZ1E0WkJhSFIwY0hNNkx5OWpaWEowYVdacFkyRjBaWE11ZEhKMWMzUmxaSE5sY25acFkyVnoKTG1sdWRHVnNMbU52YlM5SmJuUmxiRk5IV0ZKdmIzUkRRUzVrWlhJd0hRWURWUjBPQkJZRUZINDRndFg3VlNsSwpRRW1PUllRRDZSU1J2ZlJWTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQjlDOHdPQU4vSW14RHRHQUNWMjQ2S2NxamFnWk9SMGt5Y3R5QnJzR0dKVkFpQWoKZnRick5Hc0dVOFlIMjExZFJpWU5vUFB1MTlacC96ZThKbWh1akIwb0J3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA\",\"tcb_info\":\"eyJ0Y2JJbmZvIjp7InZlcnNpb24iOjIsImlzc3VlRGF0ZSI6IjIwMjMtMDYtMDdUMDc6MDg6MzdaIiwibmV4dFVwZGF0ZSI6IjIwMjMtMDctMDdUMDc6MDg6MzdaIiwiZm1zcGMiOiIwMDYwNmEwMDAwMDAiLCJwY2VJZCI6IjAwMDAiLCJ0Y2JUeXBlIjowLCJ0Y2JFdmFsdWF0aW9uRGF0YU51bWJlciI6MTUsInRjYkxldmVscyI6W3sidGNiIjp7InNneHRjYmNvbXAwMXN2biI6MTEsInNneHRjYmNvbXAwMnN2biI6MTEsInNneHRjYmNvbXAwM3N2biI6Mywic2d4dGNiY29tcDA0c3ZuIjozLCJzZ3h0Y2Jjb21wMDVzdm4iOjI1NSwic2d4dGNiY29tcDA2c3ZuIjoyNTUsInNneHRjYmNvbXAwN3N2biI6MSwic2d4dGNiY29tcDA4c3ZuIjowLCJzZ3h0Y2Jjb21wMDlzdm4iOjAsInNneHRjYmNvbXAxMHN2biI6MCwic2d4dGNiY29tcDExc3ZuIjowLCJzZ3h0Y2Jjb21wMTJzdm4iOjAsInNneHRjYmNvbXAxM3N2biI6MCwic2d4dGNiY29tcDE0c3ZuIjowLCJzZ3h0Y2Jjb21wMTVzdm4iOjAsInNneHRjYmNvbXAxNnN2biI6MCwicGNlc3ZuIjoxM30sInRjYkRhdGUiOiIyMDIzLTAyLTE1VDAwOjAwOjAwWiIsInRjYlN0YXR1cyI6IlNXSGFyZGVuaW5nTmVlZGVkIn0seyJ0Y2IiOnsic2d4dGNiY29tcDAxc3ZuIjoxMSwic2d4dGNiY29tcDAyc3ZuIjoxMSwic2d4dGNiY29tcDAzc3ZuIjozLCJzZ3h0Y2Jjb21wMDRzdm4iOjMsInNneHRjYmNvbXAwNXN2biI6MjU1LCJzZ3h0Y2Jjb21wMDZzdm4iOjI1NSwic2d4dGNiY29tcDA3c3ZuIjowLCJzZ3h0Y2Jjb21wMDhzdm4iOjAsInNneHRjYmNvbXAwOXN2biI6MCwic2d4dGNiY29tcDEwc3ZuIjowLCJzZ3h0Y2Jjb21wMTFzdm4iOjAsInNneHRjYmNvbXAxMnN2biI6MCwic2d4dGNiY29tcDEzc3ZuIjowLCJzZ3h0Y2Jjb21wMTRzdm4iOjAsInNneHRjYmNvbXAxNXN2biI6MCwic2d4dGNiY29tcDE2c3ZuIjowLCJwY2Vzdm4iOjEzfSwidGNiRGF0ZSI6IjIwMjMtMDItMTVUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiQ29uZmlndXJhdGlvbkFuZFNXSGFyZGVuaW5nTmVlZGVkIn0seyJ0Y2IiOnsic2d4dGNiY29tcDAxc3ZuIjo3LCJzZ3h0Y2Jjb21wMDJzdm4iOjksInNneHRjYmNvbXAwM3N2biI6Mywic2d4dGNiY29tcDA0c3ZuIjozLCJzZ3h0Y2Jjb21wMDVzdm4iOjI1NSwic2d4dGNiY29tcDA2c3ZuIjoyNTUsInNneHRjYmNvbXAwN3N2biI6MSwic2d4dGNiY29tcDA4c3ZuIjowLCJzZ3h0Y2Jjb21wMDlzdm4iOjAsInNneHRjYmNvbXAxMHN2biI6MCwic2d4dGNiY29tcDExc3ZuIjowLCJzZ3h0Y2Jjb21wMTJzdm4iOjAsInNneHRjYmNvbXAxM3N2biI6MCwic2d4dGNiY29tcDE0c3ZuIjowLCJzZ3h0Y2Jjb21wMTVzdm4iOjAsInNneHRjYmNvbXAxNnN2biI6MCwicGNlc3ZuIjoxM30sInRjYkRhdGUiOiIyMDIyLTA4LTEwVDAwOjAwOjAwWiIsInRjYlN0YXR1cyI6Ik91dE9mRGF0ZSJ9LHsidGNiIjp7InNneHRjYmNvbXAwMXN2biI6Nywic2d4dGNiY29tcDAyc3ZuIjo5LCJzZ3h0Y2Jjb21wMDNzdm4iOjMsInNneHRjYmNvbXAwNHN2biI6Mywic2d4dGNiY29tcDA1c3ZuIjoyNTUsInNneHRjYmNvbXAwNnN2biI6MjU1LCJzZ3h0Y2Jjb21wMDdzdm4iOjAsInNneHRjYmNvbXAwOHN2biI6MCwic2d4dGNiY29tcDA5c3ZuIjowLCJzZ3h0Y2Jjb21wMTBzdm4iOjAsInNneHRjYmNvbXAxMXN2biI6MCwic2d4dGNiY29tcDEyc3ZuIjowLCJzZ3h0Y2Jjb21wMTNzdm4iOjAsInNneHRjYmNvbXAxNHN2biI6MCwic2d4dGNiY29tcDE1c3ZuIjowLCJzZ3h0Y2Jjb21wMTZzdm4iOjAsInBjZXN2biI6MTN9LCJ0Y2JEYXRlIjoiMjAyMi0wOC0xMFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGVDb25maWd1cmF0aW9uTmVlZGVkIn0seyJ0Y2IiOnsic2d4dGNiY29tcDAxc3ZuIjo0LCJzZ3h0Y2Jjb21wMDJzdm4iOjQsInNneHRjYmNvbXAwM3N2biI6Mywic2d4dGNiY29tcDA0c3ZuIjozLCJzZ3h0Y2Jjb21wMDVzdm4iOjI1NSwic2d4dGNiY29tcDA2c3ZuIjoyNTUsInNneHRjYmNvbXAwN3N2biI6MCwic2d4dGNiY29tcDA4c3ZuIjowLCJzZ3h0Y2Jjb21wMDlzdm4iOjAsInNneHRjYmNvbXAxMHN2biI6MCwic2d4dGNiY29tcDExc3ZuIjowLCJzZ3h0Y2Jjb21wMTJzdm4iOjAsInNneHRjYmNvbXAxM3N2biI6MCwic2d4dGNiY29tcDE0c3ZuIjowLCJzZ3h0Y2Jjb21wMTVzdm4iOjAsInNneHRjYmNvbXAxNnN2biI6MCwicGNlc3ZuIjoxMX0sInRjYkRhdGUiOiIyMDIxLTExLTEwVDAwOjAwOjAwWiIsInRjYlN0YXR1cyI6Ik91dE9mRGF0ZSJ9LHsidGNiIjp7InNneHRjYmNvbXAwMXN2biI6NCwic2d4dGNiY29tcDAyc3ZuIjo0LCJzZ3h0Y2Jjb21wMDNzdm4iOjMsInNneHRjYmNvbXAwNHN2biI6Mywic2d4dGNiY29tcDA1c3ZuIjoyNTUsInNneHRjYmNvbXAwNnN2biI6MjU1LCJzZ3h0Y2Jjb21wMDdzdm4iOjAsInNneHRjYmNvbXAwOHN2biI6MCwic2d4dGNiY29tcDA5c3ZuIjowLCJzZ3h0Y2Jjb21wMTBzdm4iOjAsInNneHRjYmNvbXAxMXN2biI6MCwic2d4dGNiY29tcDEyc3ZuIjowLCJzZ3h0Y2Jjb21wMTNzdm4iOjAsInNneHRjYmNvbXAxNHN2biI6MCwic2d4dGNiY29tcDE1c3ZuIjowLCJzZ3h0Y2Jjb21wMTZzdm4iOjAsInBjZXN2biI6MTB9LCJ0Y2JEYXRlIjoiMjAyMC0xMS0xMVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifSx7InRjYiI6eyJzZ3h0Y2Jjb21wMDFzdm4iOjQsInNneHRjYmNvbXAwMnN2biI6NCwic2d4dGNiY29tcDAzc3ZuIjozLCJzZ3h0Y2Jjb21wMDRzdm4iOjMsInNneHRjYmNvbXAwNXN2biI6MjU1LCJzZ3h0Y2Jjb21wMDZzdm4iOjI1NSwic2d4dGNiY29tcDA3c3ZuIjowLCJzZ3h0Y2Jjb21wMDhzdm4iOjAsInNneHRjYmNvbXAwOXN2biI6MCwic2d4dGNiY29tcDEwc3ZuIjowLCJzZ3h0Y2Jjb21wMTFzdm4iOjAsInNneHRjYmNvbXAxMnN2biI6MCwic2d4dGNiY29tcDEzc3ZuIjowLCJzZ3h0Y2Jjb21wMTRzdm4iOjAsInNneHRjYmNvbXAxNXN2biI6MCwic2d4dGNiY29tcDE2c3ZuIjowLCJwY2Vzdm4iOjV9LCJ0Y2JEYXRlIjoiMjAxOC0wMS0wNFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifV19LCJzaWduYXR1cmUiOiIxZDUzYTdmYTMxZjQ1Mjc5MWQzZWYwNmNmMzQ2MzE1YTIyZDMyYTAyOGI2Mzk0MzYxNjZmODc4MGZiMWY2MDM3MDg2ZmI1Y2E1NGQ1OTRjN2FkYWU0NjJkZTRiZDE4NDg4ZGJjOTVjZmQ3N2Y2ODg4M2RkZjRiZDIwZmI0ZGIzYyJ9AA==\",\"qe_identity_issuer_chain\":\"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpekNDQWpLZ0F3SUJBZ0lVZmppQzFmdFZLVXBBU1k1RmhBUHBGSkc5OUZVd0NnWUlLb1pJemowRUF3SXcKYURFYU1CZ0dBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdgpjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKCkJnTlZCQVlUQWxWVE1CNFhEVEU0TURVeU1URXdOVEF4TUZvWERUSTFNRFV5TVRFd05UQXhNRm93YkRFZU1Cd0cKQTFVRUF3d1ZTVzUwWld3Z1UwZFlJRlJEUWlCVGFXZHVhVzVuTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JEYjNKdwpiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3dDUVlEClZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVORkc4eHp5ZFdSZks5MmJtR3YKUCttQWg5MVBFeVY3Smg2RkdKZDVuZEU5YUJIN1IzRTRBN3VicmxoL3pOM0M0eHZwb291R2xpck1iYStXMmxqdQp5cGFqZ2JVd2diSXdId1lEVlIwakJCZ3dGb0FVSW1VTTFscWROSW56ZzdTVlVyOVFHemtuQnF3d1VnWURWUjBmCkJFc3dTVEJIb0VXZ1E0WkJhSFIwY0hNNkx5OWpaWEowYVdacFkyRjBaWE11ZEhKMWMzUmxaSE5sY25acFkyVnoKTG1sdWRHVnNMbU52YlM5SmJuUmxiRk5IV0ZKdmIzUkRRUzVrWlhJd0hRWURWUjBPQkJZRUZINDRndFg3VlNsSwpRRW1PUllRRDZSU1J2ZlJWTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQjlDOHdPQU4vSW14RHRHQUNWMjQ2S2NxamFnWk9SMGt5Y3R5QnJzR0dKVkFpQWoKZnRick5Hc0dVOFlIMjExZFJpWU5vUFB1MTlacC96ZThKbWh1akIwb0J3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA\",\"qe_identity\":\"eyJlbmNsYXZlSWRlbnRpdHkiOnsiaWQiOiJRRSIsInZlcnNpb24iOjIsImlzc3VlRGF0ZSI6IjIwMjMtMDYtMDdUMDc6MjE6MTFaIiwibmV4dFVwZGF0ZSI6IjIwMjMtMDctMDdUMDc6MjE6MTFaIiwidGNiRXZhbHVhdGlvbkRhdGFOdW1iZXIiOjE1LCJtaXNjc2VsZWN0IjoiMDAwMDAwMDAiLCJtaXNjc2VsZWN0TWFzayI6IkZGRkZGRkZGIiwiYXR0cmlidXRlcyI6IjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiYXR0cmlidXRlc01hc2siOiJGQkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMCIsIm1yc2lnbmVyIjoiOEM0RjU3NzVENzk2NTAzRTk2MTM3Rjc3QzY4QTgyOUEwMDU2QUM4REVENzAxNDBCMDgxQjA5NDQ5MEM1N0JGRiIsImlzdnByb2RpZCI6MSwidGNiTGV2ZWxzIjpbeyJ0Y2IiOnsiaXN2c3ZuIjo4fSwidGNiRGF0ZSI6IjIwMjMtMDItMTVUMDA6MDA6MDBaIiwidGNiU3RhdHVzIjoiVXBUb0RhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjZ9LCJ0Y2JEYXRlIjoiMjAyMS0xMS0xMFQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjV9LCJ0Y2JEYXRlIjoiMjAyMC0xMS0xMVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjR9LCJ0Y2JEYXRlIjoiMjAxOS0xMS0xM1QwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjJ9LCJ0Y2JEYXRlIjoiMjAxOS0wNS0xNVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifSx7InRjYiI6eyJpc3Zzdm4iOjF9LCJ0Y2JEYXRlIjoiMjAxOC0wOC0xNVQwMDowMDowMFoiLCJ0Y2JTdGF0dXMiOiJPdXRPZkRhdGUifV19LCJzaWduYXR1cmUiOiI4OTgzYmE0MDFiZmJhZmYwMGI1MDEyMDhkMTVkYmZhNmIxOGFmZTBiMTI1OTQ5ZDhjOWU3YWZiNDg4ZDY1M2VlNmUxOTg5NmQ0OTYzMWJjYzRmNzI3YTZjZWQxZTEwNDA2ZDE1M2I4NDc0NzFlYmY3MTMxOWU4ZWIzYmQ3YzZiYyJ9AA==\"}") + var collateral TeeQvCollateral + err = json.Unmarshal(jsonCollateralBlob, &collateral) + req.Nil(err) + t.Log("Collateral: " + string(jsonCollateralBlob)) + + var jsonQuoteBlob = []byte(`{"version":[3,0],"key_type":[2,0],"reserved":[0,0,0,0],"qe_svn":[9,0],"pce_svn":[14,0],"qe_vendor_id":[147,154,114,51,247,156,76,169,148,10,13,179,149,127,6,7],"user_data":[96,61,1,77,110,199,12,105,18,177,33,134,118,220,150,214,0,0,0,0],"report_body":{"cpusvn":[11,11,16,15,255,255,1,0,0,0,0,0,0,0,0,0],"miscselect":[0,0,0,0],"reserved1":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"features":[7,0,0,0,0,0,0,0],"xfrm":[231,0,0,0,0,0,0,0],"mrenclave":[95,143,228,194,41,96,172,169,197,141,252,177,134,116,59,83,32,130,118,108,43,68,209,47,209,244,99,239,228,123,200,192],"reserved2":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"mrsigner":[21,34,115,149,100,145,172,221,247,198,177,46,91,254,224,244,3,149,178,213,135,14,74,188,107,92,234,111,22,52,238,121],"reserved3":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"isv_prodid":[0,0],"isv_svn":[0,0],"reserved4":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reportdata":[41,128,55,216,135,130,224,34,224,25,179,2,7,69,183,138,164,14,217,92,119,218,75,247,243,37,61,58,68,196,253,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}`) + var expectedQuote Quote + err = json.Unmarshal(jsonQuoteBlob, &expectedQuote) + req.Nil(err) + t.Log("MrSigner: " + hex.EncodeToString(expectedQuote.ReportBody.MrSigner[:])) + t.Log("MrEnclave: " + hex.EncodeToString(expectedQuote.ReportBody.MrEnclave[:])) + + result, err := SgxVerifyRemoteReportCollateral(quote, collateral, expirationCheckDate) + req.Nil(err) + req.Equal(SgxQlQvResultSwHardeningNeeded, result.VerificationResult) + req.False(result.CollateralExpired) + req.Equal(expectedExpirationDate, result.EarliestExpirationDate) + quoteJson, err := json.Marshal(result.Quote) + req.Nil(err) + t.Log("Quote: " + string(quoteJson)) + req.Equal(expectedQuote, result.Quote) + + result, err = SgxVerifyRemoteReportCollateral(quote, collateral, expectedExpirationDate) + req.Nil(err) + req.Equal(SgxQlQvResultSwHardeningNeeded, result.VerificationResult) + req.True(result.CollateralExpired) + req.Equal(expectedExpirationDate, result.EarliestExpirationDate) + req.Equal(expectedQuote, result.Quote) +} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..39a2b6e --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:base" + ] +} diff --git a/tee/backend.go b/tee/backend.go new file mode 100644 index 0000000..f78806b --- /dev/null +++ b/tee/backend.go @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import ( + "context" + "github.com/matter-labs/vault-auth-tee/version" + + "github.com/hashicorp/vault/sdk/framework" + "github.com/hashicorp/vault/sdk/logical" +) + +const operationPrefixTee = "tee" + +func Factory(ctx context.Context, conf *logical.BackendConfig) (logical.Backend, error) { + b := Backend() + if err := b.Setup(ctx, conf); err != nil { + return nil, err + } + return b, nil +} + +func Backend() *backend { + var b backend + b.Backend = &framework.Backend{ + Help: backendHelp, + PathsSpecial: &logical.Paths{ + Unauthenticated: []string{ + "login", + }, + }, + Paths: []*framework.Path{ + pathInfo(&b), + pathLogin(&b), + pathListTees(&b), + pathTees(&b), + }, + AuthRenew: b.loginPathWrapper(b.pathLoginRenew), + BackendType: logical.TypeCredential, + RunningVersion: "v" + version.Version, + } + + return &b +} + +type backend struct { + *framework.Backend +} + +const backendHelp = ` +The "tee" credential provider allows authentication using +remote attestation verification together with TLS client certificates. +A client connects to Vault and uses the "login" endpoint to generate a client token. + +Trusted execution environments are configured using the "tees/" endpoint +by a user with root access. Authentication is then done +by supplying the attestation report, the attestation collateral +and the client certificate for "login". +` diff --git a/tee/backend_test.go b/tee/backend_test.go new file mode 100644 index 0000000..75b352f --- /dev/null +++ b/tee/backend_test.go @@ -0,0 +1,284 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import ( + "context" + "crypto/tls" + "fmt" + "io" + "testing" + "time" + + "github.com/hashicorp/go-rootcerts" + logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical" + "github.com/hashicorp/vault/sdk/logical" +) + +func testFactory(t *testing.T) logical.Backend { + storage := &logical.InmemStorage{} + b, err := Factory(context.Background(), &logical.BackendConfig{ + System: &logical.StaticSystemView{ + DefaultLeaseTTLVal: 1000 * time.Second, + MaxLeaseTTLVal: 1800 * time.Second, + }, + StorageView: storage, + }) + if err != nil { + t.Fatalf("error: %s", err) + } + if err := b.Initialize(context.Background(), &logical.InitializationRequest{ + Storage: storage, + }); err != nil { + t.Fatalf("error: %s", err) + } + return b +} + +// Test a self-signed client that has the hashed public key in the attestation report +func TestBackend_basic_SGX_enclave(t *testing.T) { + connState, err := testConnState("test-fixtures/keys/cert.pem", + "test-fixtures/keys/key.pem", "test-fixtures/keys/cert.pem") + if err != nil { + t.Fatalf("error testing connection state: %v", err) + } + + quoteBase64 := `AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GB2A9AU1uxwxpErEhhnbcltYAAAAACwsQD///AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAABiUazVH08oDb033tRaFfij9US1p/tNBHcZgU3kS+qv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZe/ri1/kInRdrGLXO8tgd7B/R3DMumyPFU8TgL+PkqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxhAAAPvTSIG+2X8S4ne9Zsb8a5wqVabUhgr7r3GlpScrLaGMv8RDLVr9n8O/9CfASa11lqkO1DT+JqFTu+5Mitjp2rm/ptkyoG99YfjwdzdsURZQvQCidBDdhrt1kcr+7HwTFcf1hbifB13klNa6Npsm5sc7SMgVXrVM98+zCj0+jTleCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLZrH69IGHR4/H2DCpkrZPl4lJ7yWZvpARseCwUJ/wmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGrO+CXpMIu8FYYaLb9gwNsNegCmkZgK72V9wj8LDQmJlvUfpZ+qz4tYm5HucJK8ulPfQMCRoFowZFxLlXF1EiAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAF4OAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThUQ0NCSmlnQXdJQkFnSVVEMkNQQzRleDNQcnB6UE9YRXBuVTIrNDMzYm93Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOVEV3TWpBeU5EVTJXaGNOTXpBd05URXdNakF5TkRVMgpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkR1ZQpDOFl2L1JnZ2V5cnV5cWpmUlhydk1ZRjBoUnhRd1dueW9oVXQvd2VjeUxlL2YyREdZSGk1RlNGLzZnUmlTOC9WCjZiYld6bXEycTBsZm9Mei9hMEdqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGSi95dmhxV0lBd0prOTJIbXpjSWtreWcKMUFDQU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUXFmNzBJOGRnYksweGVtaEY0TExIM3pDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUUtEbyt6dWdoCjhaY0xBME9hM3BSa2REQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEUndBdwpSQUlnRHBmZFptVE5IYnVRaFE0c0ZMSnZ5czIzY2ZxdWR1ODBZcUlEVm5ud2NPRUNJRmhUMFF2R2xqS1FSM2NvClBqOGhoSFQ5anVWYXFkM1RydE1YRDFQZEhZWHYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=` + collateralJson := `{"major_version":1,"minor_version":0,"tee_type":0,"pck_crl_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,108,106,67,67,65,106,50,103,65,119,73,66,65,103,73,86,65,74,86,118,88,99,50,57,71,43,72,112,81,69,110,74,49,80,81,122,122,103,70,88,67,57,53,85,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,10,77,71,103,120,71,106,65,89,66,103,78,86,66,65,77,77,69,85,108,117,100,71,86,115,73,70,78,72,87,67,66,83,98,50,57,48,73,69,78,66,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,10,98,51,74,119,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,10,67,81,89,68,86,81,81,71,69,119,74,86,85,122,65,101,70,119,48,120,79,68,65,49,77,106,69,120,77,68,85,119,77,84,66,97,70,119,48,122,77,122,65,49,77,106,69,120,77,68,85,119,77,84,66,97,77,72,65,120,73,106,65,103,10,66,103,78,86,66,65,77,77,71,85,108,117,100,71,86,115,73,70,78,72,87,67,66,81,81,48,115,103,85,71,120,104,100,71,90,118,99,109,48,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,10,73,69,78,118,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,10,67,122,65,74,66,103,78,86,66,65,89,84,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,78,83,66,47,55,116,50,49,108,88,83,79,10,50,67,117,122,112,120,119,55,52,101,74,66,55,50,69,121,68,71,103,87,53,114,88,67,116,120,50,116,86,84,76,113,54,104,75,107,54,122,43,85,105,82,90,67,110,113,82,55,112,115,79,118,103,113,70,101,83,120,108,109,84,108,74,108,10,101,84,109,105,50,87,89,122,51,113,79,66,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,10,66,103,78,86,72,82,56,69,83,122,66,74,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,10,100,109,108,106,90,88,77,117,97,87,53,48,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,108,87,57,100,10,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,10,65,102,56,67,65,81,65,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,82,65,73,103,88,115,86,107,105,48,119,43,105,54,86,89,71,87,51,85,70,47,50,50,117,97,88,101,48,89,74,68,106,49,85,101,10,110,65,43,84,106,68,49,97,105,53,99,67,73,67,89,98,49,83,65,109,68,53,120,107,102,84,86,112,118,111,52,85,111,121,105,83,89,120,114,68,87,76,109,85,82,52,67,73,57,78,75,121,102,80,78,43,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"root_ca_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,66,73,84,67,66,121,65,73,66,65,84,65,75,66,103,103,113,104,107,106,79,80,81,81,68,65,106,66,111,77,82,111,119,71,65,89,68,86,81,81,68,68,66,70,74,98,110,82,108,98,67,66,84,82,49,103,103,85,109,57,118,10,100,67,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,66,65,99,77,67,49,78,104,98,110,82,104,10,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,81,119,77,122,69,119,77,106,73,49,77,86,111,88,10,68,84,73,48,77,68,81,119,77,106,69,119,77,106,73,49,77,86,113,103,76,122,65,116,77,65,111,71,65,49,85,100,70,65,81,68,65,103,69,66,77,66,56,71,65,49,85,100,73,119,81,89,77,66,97,65,70,67,74,108,68,78,90,97,10,110,84,83,74,56,52,79,48,108,86,75,47,85,66,115,53,74,119,97,115,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,65,48,103,65,77,69,85,67,73,70,70,88,102,85,102,90,43,54,70,88,116,108,56,101,116,102,82,108,10,101,55,120,101,86,115,121,118,99,49,111,68,56,98,108,106,49,119,83,65,87,114,69,89,65,105,69,65,107,53,65,86,55,66,89,50,53,43,114,54,88,48,74,115,72,107,65,109,82,56,90,122,69,121,116,111,85,77,113,57,97,77,55,50,10,117,116,100,111,75,103,77,61,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"pck_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,75,89,84,67,67,67,103,103,67,65,81,69,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,99,68,69,105,77,67,65,71,65,49,85,69,65,119,119,90,83,87,53,48,90,87,119,103,85,48,100,89,73,70,66,68,10,83,121,66,81,98,71,70,48,90,109,57,121,98,83,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,10,66,65,99,77,67,49,78,104,98,110,82,104,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,88,68,84,73,122,77,68,89,120,77,106,73,120,77,68,65,119,77,49,111,119,103,103,107,48,77,68,77,67,70,71,47,68,84,108,65,106,53,121,105,83,78,68,88,87,71,113,83,52,80,71,71,66,10,90,113,48,49,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,79,43,117,98,112,99,86,47,75,69,55,104,43,77,122,10,54,67,89,101,49,116,109,81,113,83,97,116,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,80,49,103,104,107,104,105,10,110,76,112,122,66,52,116,78,83,83,57,76,80,113,100,66,114,81,106,78,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,10,65,73,114,53,74,66,104,79,72,86,114,57,51,88,80,68,49,106,111,83,57,101,105,49,99,51,53,87,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,78,65,73,86,65,76,69,108,101,88,106,80,113,99,122,100,66,49,109,114,43,77,88,75,99,118,114,106,112,52,113,98,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,100,80,54,109,70,75,108,121,118,103,52,111,81,47,73,70,109,68,87,66,72,116,104,121,43,98,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,43,99,84,118,86,114,79,114,83,78,86,51,52,81,105,54,55,102,83,47,105,65,70,67,70,76,107,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,72,101,66,51,106,53,53,102,120,80,75,72,106,122,68,87,115,72,121,97,77,79,97,122,67,120,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,78,52,107,74,80,108,121,122,113,108,80,56,106,109,84,102,48,50,65,119,108,65,112,51,87,10,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,119,122,71,101,85,81,109,50,82,81,102,84,122,120,69,121,122,103,10,65,48,110,118,85,110,77,90,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,78,56,73,49,49,97,50,97,110,83,88,10,57,68,116,98,116,89,114,97,66,78,80,48,57,54,107,51,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,75,75,57,73,10,87,50,122,50,102,107,67,97,79,100,88,76,87,117,53,70,109,80,101,111,43,110,115,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,10,65,104,85,65,43,52,115,116,114,115,67,83,121,116,113,75,113,98,120,80,56,118,72,67,68,81,78,71,90,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,10,65,119,111,66,65,84,65,48,65,104,85,65,122,85,104,81,114,70,75,57,122,71,109,109,112,118,66,89,121,76,120,88,117,57,67,49,43,71,81,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,109,85,51,84,90,109,57,83,100,102,117,65,88,53,88,100,65,114,49,81,121,121,90,53,50,75,48,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,65,104,78,112,65,67,85,105,100,78,107,68,88,117,51,49,82,88,82,105,43,116,68,118,84,66,99,78,77,106,77,119,78,84,69,122,10,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,72,121,118,51,80,106,109,48,52,69,113,105,102,89,65,98,49,122,48,107,77,90,116,98,43,65,70,119,48,121,10,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,79,90,75,43,104,82,117,87,107,67,55,47,79,74,87,101,98,67,55,47,71,119,90,82,10,112,76,85,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,82,106,110,120,79,97,85,69,68,57,122,47,71,82,54,75,84,55,10,71,47,67,71,55,87,65,53,99,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,86,110,86,77,47,107,107,110,99,10,72,108,69,49,82,77,51,73,77,76,56,90,116,47,72,122,65,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,65,47,97,10,81,54,65,76,97,79,112,53,116,56,76,101,114,113,119,76,83,89,118,102,115,113,43,81,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,10,78,65,73,86,65,74,49,110,100,84,117,66,53,72,67,81,114,113,100,106,43,43,120,77,82,85,109,56,50,53,107,122,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,10,66,65,77,75,65,81,69,119,77,119,73,85,78,76,43,55,101,104,50,99,86,111,70,72,52,82,105,50,70,80,101,51,98,116,80,118,97,78,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,104,100,80,74,79,66,116,51,112,43,66,78,69,90,121,101,87,116,90,48,110,47,80,47,113,52,99,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,107,52,104,56,112,69,69,101,101,112,73,55,48,102,55,83,103,90,115,112,83,102,73,66,116,98,81,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,107,109,78,120,105,103,53,77,74,108,118,50,76,56,106,111,51,114,76,52,109,111,55,55,85,86,120,99,78,10,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,75,90,118,71,110,83,85,105,71,90,50,105,99,119,53,65,54,120,85,120,109,10,75,51,69,117,99,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,118,119,84,89,81,118,100,78,115,116,53,104,100,10,69,71,83,66,113,73,68,84,111,66,47,97,66,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,118,52,69,115,115,10,77,57,65,50,113,115,108,115,112,110,79,47,72,112,112,72,116,107,49,99,117,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,10,70,81,67,68,50,97,121,78,105,55,85,74,48,99,98,73,67,97,49,120,76,111,81,119,86,90,55,88,56,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,10,67,103,69,66,77,68,77,67,70,72,107,120,47,86,67,49,66,120,119,98,118,56,87,51,116,116,55,89,116,70,117,100,105,52,85,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,72,54,73,79,75,88,67,57,53,100,86,47,101,52,51,102,103,122,108,73,84,104,56,100,67,67,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,101,104,55,76,68,115,121,50,78,73,43,81,82,122,118,78,66,108,55,108,97,56,77,105,116,57,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,10,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,97,47,83,55,112,67,107,99,49,85,75,70,110,50,90,97,82,70,68,102,72,85,67,48,102,67,82,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,69,83,66,115,80,69,88,75,75,69,55,97,87,48,43,113,99,100,119,111,76,70,101,120,89,51,97,10,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,75,101,70,110,49,101,89,76,118,68,109,102,84,101,56,106,118,76,118,10,87,115,103,49,47,120,113,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,101,117,78,51,83,75,110,53,69,118,84,71,10,79,54,101,114,66,56,87,84,122,104,48,100,69,89,69,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,84,105,69,115,122,10,74,112,107,52,119,90,87,113,70,119,47,75,100,100,111,88,100,84,106,102,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,10,70,67,119,56,120,118,54,83,101,100,115,86,70,116,88,79,79,102,75,111,109,77,50,108,111,88,88,104,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,77,119,73,85,99,88,108,73,97,72,85,74,73,48,118,112,101,101,83,51,51,79,98,122,71,43,57,107,116,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,10,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,110,88,98,118,76,68,110,66,78,117,104,108,105,50,53,122,108,114,72,88,82,70,111,110,89,120,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,119,43,65,108,47,75,109,86,56,50,57,90,116,73,82,110,107,53,52,43,78,79,89,50,71,109,56,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,106,70,57,114,77,108,102,97,66,98,70,48,75,101,76,109,71,54,108,108,49,110,77,119,89,71,111,88,68,84,73,122,10,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,111,88,120,82,99,105,55,66,52,77,77,110,106,43,105,57,56,70,73,70,110,76,55,69,10,53,107,103,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,97,65,118,77,67,48,119,67,103,89,68,86,82,48,85,66,65,77,67,65,81,69,119,10,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,108,87,57,100,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,10,82,65,73,103,70,67,99,69,120,104,99,57,109,117,90,67,74,121,98,69,103,97,68,116,103,72,49,90,70,53,115,55,51,57,73,72,84,106,88,108,47,74,90,84,68,82,52,67,73,71,53,87,101,76,99,70,67,103,50,110,90,111,122,80,10,53,78,113,67,48,43,77,101,99,109,89,120,80,78,48,101,117,98,80,98,112,122,104,115,70,50,56,122,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"tcb_info_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"tcb_info":[123,34,116,99,98,73,110,102,111,34,58,123,34,105,100,34,58,34,83,71,88,34,44,34,118,101,114,115,105,111,110,34,58,51,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,48,56,58,49,49,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,48,56,58,49,49,90,34,44,34,102,109,115,112,99,34,58,34,48,48,54,48,54,97,48,48,48,48,48,48,34,44,34,112,99,101,73,100,34,58,34,48,48,48,48,34,44,34,116,99,98,84,121,112,101,34,58,48,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,67,111,110,102,105,103,117,114,97,116,105,111,110,65,110,100,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,67,111,110,102,105,103,117,114,97,116,105,111,110,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,48,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,49,45,48,52,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,49,48,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,51,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,48,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,51,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,55,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,49,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,53,102,101,101,55,53,54,56,52,55,49,56,98,99,98,57,49,57,49,51,49,50,99,100,51,98,102,52,55,48,57,54,97,52,48,54,56,102,52,53,48,100,50,101,99,57,101,48,53,98,56,99,100,53,97,51,97,55,99,98,54,49,98,50,57,50,54,49,50,97,55,48,56,99,52,99,53,97,51,48,52,56,51,54,99,56,50,99,51,97,55,49,57,49,52,52,55,101,51,98,97,54,57,49,101,53,57,50,56,55,99,99,57,99,56,57,52,51,101,56,50,49,55,51,52,100,52,49,34,125,0],"qe_identity_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"qe_identity":[123,34,101,110,99,108,97,118,101,73,100,101,110,116,105,116,121,34,58,123,34,105,100,34,58,34,81,69,34,44,34,118,101,114,115,105,111,110,34,58,50,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,52,56,58,52,48,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,52,56,58,52,48,90,34,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,109,105,115,99,115,101,108,101,99,116,34,58,34,48,48,48,48,48,48,48,48,34,44,34,109,105,115,99,115,101,108,101,99,116,77,97,115,107,34,58,34,70,70,70,70,70,70,70,70,34,44,34,97,116,116,114,105,98,117,116,101,115,34,58,34,49,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,97,116,116,114,105,98,117,116,101,115,77,97,115,107,34,58,34,70,66,70,70,70,70,70,70,70,70,70,70,70,70,70,70,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,109,114,115,105,103,110,101,114,34,58,34,56,67,52,70,53,55,55,53,68,55,57,54,53,48,51,69,57,54,49,51,55,70,55,55,67,54,56,65,56,50,57,65,48,48,53,54,65,67,56,68,69,68,55,48,49,52,48,66,48,56,49,66,48,57,52,52,57,48,67,53,55,66,70,70,34,44,34,105,115,118,112,114,111,100,105,100,34,58,49,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,56,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,85,112,84,111,68,97,116,101,34,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,54,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,52,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,49,49,45,49,51,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,50,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,48,53,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,56,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,48,50,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,57,55,102,102,56,57,53,55,57,55,53,98,52,48,97,97,53,49,97,49,55,55,54,53,100,55,51,52,51,54,51,98,56,99,98,55,53,53,55,101,54,54,53,55,98,48,52,102,54,51,98,54,55,99,48,53,102,50,56,56,54,98,101,49,98,55,99,99,49,52,98,57,99,49,98,56,56,57,101,48,51,98,56,53,56,54,54,101,50,55,55,97,49,48,50,101,98,57,102,98,56,53,48,50,57,98,55,48,48,56,98,52,49,55,53,52,99,100,98,97,48,49,52,97,53,97,56,99,34,125,0]}` + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC) + timeNowFunc = func() time.Time { + return expectedExpirationDate.Add(-1000 * time.Second) + } + mrSigner := "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7e" + mrEnclave := "18946b3547d3ca036f4df7b516857e28fd512d69fed3411dc660537912faabf8" + logicaltest.Test(t, logicaltest.TestCase{ + CredentialBackend: testFactory(t), + Steps: []logicaltest.TestStep{ + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithName(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepTEE(t, "tee_app_1", "sgx", "", mrEnclave, "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithName(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_2", quoteBase64, collateralJson), + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok", "foo", false), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepTEE(t, "tee_app_1", "sgx", "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7f", "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepTEE(t, "tee_app_1", "sgx", "", "18946b3547d3ca036f4df7b516857e28fd512d69fed3411dc660537912faabf9", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepTEE(t, "tee_app_1", "foo", mrSigner, "", "Ok,SwHardeningNeeded", "foo", true), + testAccStepTEE(t, "tee_app_1", "sgx,foo", mrSigner, "", "Ok,SwHardeningNeeded", "foo", true), + testAccStepTEE(t, "tee_app_1", "sgx,sgx", mrSigner, "", "Ok,SwHardeningNeeded", "foo", true), + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok,SwHardeningNeeded,FOO", "foo", true), + }, + }) +} + +// Test a self-signed client that does not have the hashed public key in the attestation report +func TestBackend_basic_SGX_enclave_no_PK(t *testing.T) { + connState, err := testConnState("test-fixtures/keys/cert.pem", + "test-fixtures/keys/key.pem", "test-fixtures/keys/cert.pem") + if err != nil { + t.Fatalf("error testing connection state: %v", err) + } + + quoteBase64 := `AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GBxok8pwXeE9qG6z/m0DCX1gAAAAACwsQD///AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAAGTQ4+v7uY/QYawunSGXeA+BnJFyzu/0sxMNckemQhrSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/yhAAAE3OOX4ST9UJtitHl3moeK7+OkVCmHQ2Btae9M58F2frWt9DOxETQIqmr7Kl0aTZqqPSQIjFUKFLBPxSBRAsl+c2QNc9a4PwxOE0K0s2JLoR81GSJFlQXlTAUVnJXTquAKI+RuA0/e6Js4W3n+ISpXTqAL2PruK7DHMicccVrYLqCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxTljpSBRZcGlxS15oePs6z1gyqvltMKBFXXik2a7SfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5GN/C1PdFd0N/T5wFgpwYmcl0DyeHEpjbo20/VLhQbl095s0ZbRf/VG9T5LfZtMF84iftVCwlx7IuQ4MCB1loSAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAGIOAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThqQ0NCSmlnQXdJQkFnSVVXMHFwTXhFN1I3aXUwSzk4YlVqN2ZLc2Z1cWN3Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOREF5TVRjeU1URTVXaGNOTXpBd05EQXlNVGN5TVRFNQpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkU3RQpGUE1oYVVHRVdraGtPQ3g2UUxjdXFyVkUyVWtiNjEvbWJtVGZHM2RpQ2JoVndMOEl5S3MxM0Z1a1BSWVgrZHB5Cno4anp2NlhKbmd2R0xRQXA3WWVqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGQUhwSDhJYXJRdnlROWdtU3BZNU0wSVkKTFM0cU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUVdvcnZOeGlXYmVJMnBuYlN3YW5veERDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUXBKdXMvZDV5Cnp2OThFVmN5dUdHWCtUQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEU0FBdwpSUUloQVBIYlp2SW1QaHR6U1lPU0xHRUdVRlEyaDBYNnBnZUh3b1EzbmpKN3ZIdFdBaUJDN3h1V2VueU9GaG5tCnFYOG1jV3ZxNFgycm1kY09WY2RTTFBaTE9OS0FUdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNsakNDQWoyZ0F3SUJBZ0lWQUpWdlhjMjlHK0hwUUVuSjFQUXp6Z0ZYQzk1VU1Bb0dDQ3FHU000OUJBTUMKTUdneEdqQVlCZ05WQkFNTUVVbHVkR1ZzSUZOSFdDQlNiMjkwSUVOQk1Sb3dHQVlEVlFRS0RCRkpiblJsYkNCRApiM0p3YjNKaGRHbHZiakVVTUJJR0ExVUVCd3dMVTJGdWRHRWdRMnhoY21FeEN6QUpCZ05WQkFnTUFrTkJNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4T0RBMU1qRXhNRFV3TVRCYUZ3MHpNekExTWpFeE1EVXdNVEJhTUhBeElqQWcKQmdOVkJBTU1HVWx1ZEdWc0lGTkhXQ0JRUTBzZ1VHeGhkR1p2Y20wZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWcwpJRU52Y25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4CkN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVOU0IvN3QyMWxYU08KMkN1enB4dzc0ZUpCNzJFeURHZ1c1clhDdHgydFZUTHE2aEtrNnorVWlSWkNucVI3cHNPdmdxRmVTeGxtVGxKbAplVG1pMldZejNxT0J1ekNCdURBZkJnTlZIU01FR0RBV2dCUWlaUXpXV3AwMGlmT0R0SlZTdjFBYk9TY0dyREJTCkJnTlZIUjhFU3pCSk1FZWdSYUJEaGtGb2RIUndjem92TDJObGNuUnBabWxqWVhSbGN5NTBjblZ6ZEdWa2MyVnkKZG1salpYTXVhVzUwWld3dVkyOXRMMGx1ZEdWc1UwZFlVbTl2ZEVOQkxtUmxjakFkQmdOVkhRNEVGZ1FVbFc5ZAp6YjBiNGVsQVNjblU5RFBPQVZjTDNsUXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCCkFmOENBUUF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnWHNWa2kwdytpNlZZR1czVUYvMjJ1YVhlMFlKRGoxVWUKbkErVGpEMWFpNWNDSUNZYjFTQW1ENXhrZlRWcHZvNFVveWlTWXhyRFdMbVVSNENJOU5LeWZQTisKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2p6Q0NBalNnQXdJQkFnSVVJbVVNMWxxZE5JbnpnN1NWVXI5UUd6a25CcXd3Q2dZSUtvWkl6ajBFQXdJdwphREVhTUJnR0ExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52CmNuQnZjbUYwYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUoKQmdOVkJBWVRBbFZUTUI0WERURTRNRFV5TVRFd05EVXhNRm9YRFRRNU1USXpNVEl6TlRrMU9Wb3dhREVhTUJnRwpBMVVFQXd3UlNXNTBaV3dnVTBkWUlGSnZiM1FnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzSUVOdmNuQnZjbUYwCmFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXhDekFKQmdOVkJBWVQKQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUM2bkV3TURJWVpPai9pUFdzQ3phRUtpNwoxT2lPU0xSRmhXR2pibkJWSmZWbmtZNHUzSWprRFlZTDBNeE80bXFzeVlqbEJhbFRWWXhGUDJzSkJLNXpsS09CCnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlNCZ05WSFI4RVN6QkoKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeWRtbGpaWE11YVc1MApaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVJbVVNMWxxZE5JbnpnN1NWClVyOVFHemtuQnF3d0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0NnWUkKS29aSXpqMEVBd0lEU1FBd1JnSWhBT1cvNVFrUitTOUNpU0RjTm9vd0x1UFJMc1dHZi9ZaTdHU1g5NEJnd1R3ZwpBaUVBNEowbHJIb01zK1hvNW8vc1g2TzlRV3hIUkF2WlVHT2RSUTdjdnFSWGFxST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoA` + collateralJson := `{"major_version":1,"minor_version":0,"tee_type":0,"pck_crl_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,108,106,67,67,65,106,50,103,65,119,73,66,65,103,73,86,65,74,86,118,88,99,50,57,71,43,72,112,81,69,110,74,49,80,81,122,122,103,70,88,67,57,53,85,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,10,77,71,103,120,71,106,65,89,66,103,78,86,66,65,77,77,69,85,108,117,100,71,86,115,73,70,78,72,87,67,66,83,98,50,57,48,73,69,78,66,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,10,98,51,74,119,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,10,67,81,89,68,86,81,81,71,69,119,74,86,85,122,65,101,70,119,48,120,79,68,65,49,77,106,69,120,77,68,85,119,77,84,66,97,70,119,48,122,77,122,65,49,77,106,69,120,77,68,85,119,77,84,66,97,77,72,65,120,73,106,65,103,10,66,103,78,86,66,65,77,77,71,85,108,117,100,71,86,115,73,70,78,72,87,67,66,81,81,48,115,103,85,71,120,104,100,71,90,118,99,109,48,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,10,73,69,78,118,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,10,67,122,65,74,66,103,78,86,66,65,89,84,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,78,83,66,47,55,116,50,49,108,88,83,79,10,50,67,117,122,112,120,119,55,52,101,74,66,55,50,69,121,68,71,103,87,53,114,88,67,116,120,50,116,86,84,76,113,54,104,75,107,54,122,43,85,105,82,90,67,110,113,82,55,112,115,79,118,103,113,70,101,83,120,108,109,84,108,74,108,10,101,84,109,105,50,87,89,122,51,113,79,66,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,10,66,103,78,86,72,82,56,69,83,122,66,74,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,10,100,109,108,106,90,88,77,117,97,87,53,48,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,108,87,57,100,10,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,10,65,102,56,67,65,81,65,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,82,65,73,103,88,115,86,107,105,48,119,43,105,54,86,89,71,87,51,85,70,47,50,50,117,97,88,101,48,89,74,68,106,49,85,101,10,110,65,43,84,106,68,49,97,105,53,99,67,73,67,89,98,49,83,65,109,68,53,120,107,102,84,86,112,118,111,52,85,111,121,105,83,89,120,114,68,87,76,109,85,82,52,67,73,57,78,75,121,102,80,78,43,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"root_ca_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,66,73,84,67,66,121,65,73,66,65,84,65,75,66,103,103,113,104,107,106,79,80,81,81,68,65,106,66,111,77,82,111,119,71,65,89,68,86,81,81,68,68,66,70,74,98,110,82,108,98,67,66,84,82,49,103,103,85,109,57,118,10,100,67,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,66,65,99,77,67,49,78,104,98,110,82,104,10,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,81,119,77,122,69,119,77,106,73,49,77,86,111,88,10,68,84,73,48,77,68,81,119,77,106,69,119,77,106,73,49,77,86,113,103,76,122,65,116,77,65,111,71,65,49,85,100,70,65,81,68,65,103,69,66,77,66,56,71,65,49,85,100,73,119,81,89,77,66,97,65,70,67,74,108,68,78,90,97,10,110,84,83,74,56,52,79,48,108,86,75,47,85,66,115,53,74,119,97,115,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,65,48,103,65,77,69,85,67,73,70,70,88,102,85,102,90,43,54,70,88,116,108,56,101,116,102,82,108,10,101,55,120,101,86,115,121,118,99,49,111,68,56,98,108,106,49,119,83,65,87,114,69,89,65,105,69,65,107,53,65,86,55,66,89,50,53,43,114,54,88,48,74,115,72,107,65,109,82,56,90,122,69,121,116,111,85,77,113,57,97,77,55,50,10,117,116,100,111,75,103,77,61,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"pck_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,75,89,84,67,67,67,103,103,67,65,81,69,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,99,68,69,105,77,67,65,71,65,49,85,69,65,119,119,90,83,87,53,48,90,87,119,103,85,48,100,89,73,70,66,68,10,83,121,66,81,98,71,70,48,90,109,57,121,98,83,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,10,66,65,99,77,67,49,78,104,98,110,82,104,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,88,68,84,73,122,77,68,89,120,77,106,73,120,77,68,65,119,77,49,111,119,103,103,107,48,77,68,77,67,70,71,47,68,84,108,65,106,53,121,105,83,78,68,88,87,71,113,83,52,80,71,71,66,10,90,113,48,49,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,79,43,117,98,112,99,86,47,75,69,55,104,43,77,122,10,54,67,89,101,49,116,109,81,113,83,97,116,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,80,49,103,104,107,104,105,10,110,76,112,122,66,52,116,78,83,83,57,76,80,113,100,66,114,81,106,78,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,10,65,73,114,53,74,66,104,79,72,86,114,57,51,88,80,68,49,106,111,83,57,101,105,49,99,51,53,87,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,78,65,73,86,65,76,69,108,101,88,106,80,113,99,122,100,66,49,109,114,43,77,88,75,99,118,114,106,112,52,113,98,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,100,80,54,109,70,75,108,121,118,103,52,111,81,47,73,70,109,68,87,66,72,116,104,121,43,98,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,43,99,84,118,86,114,79,114,83,78,86,51,52,81,105,54,55,102,83,47,105,65,70,67,70,76,107,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,72,101,66,51,106,53,53,102,120,80,75,72,106,122,68,87,115,72,121,97,77,79,97,122,67,120,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,78,52,107,74,80,108,121,122,113,108,80,56,106,109,84,102,48,50,65,119,108,65,112,51,87,10,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,119,122,71,101,85,81,109,50,82,81,102,84,122,120,69,121,122,103,10,65,48,110,118,85,110,77,90,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,78,56,73,49,49,97,50,97,110,83,88,10,57,68,116,98,116,89,114,97,66,78,80,48,57,54,107,51,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,75,75,57,73,10,87,50,122,50,102,107,67,97,79,100,88,76,87,117,53,70,109,80,101,111,43,110,115,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,10,65,104,85,65,43,52,115,116,114,115,67,83,121,116,113,75,113,98,120,80,56,118,72,67,68,81,78,71,90,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,10,65,119,111,66,65,84,65,48,65,104,85,65,122,85,104,81,114,70,75,57,122,71,109,109,112,118,66,89,121,76,120,88,117,57,67,49,43,71,81,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,109,85,51,84,90,109,57,83,100,102,117,65,88,53,88,100,65,114,49,81,121,121,90,53,50,75,48,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,65,104,78,112,65,67,85,105,100,78,107,68,88,117,51,49,82,88,82,105,43,116,68,118,84,66,99,78,77,106,77,119,78,84,69,122,10,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,72,121,118,51,80,106,109,48,52,69,113,105,102,89,65,98,49,122,48,107,77,90,116,98,43,65,70,119,48,121,10,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,79,90,75,43,104,82,117,87,107,67,55,47,79,74,87,101,98,67,55,47,71,119,90,82,10,112,76,85,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,82,106,110,120,79,97,85,69,68,57,122,47,71,82,54,75,84,55,10,71,47,67,71,55,87,65,53,99,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,86,110,86,77,47,107,107,110,99,10,72,108,69,49,82,77,51,73,77,76,56,90,116,47,72,122,65,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,65,47,97,10,81,54,65,76,97,79,112,53,116,56,76,101,114,113,119,76,83,89,118,102,115,113,43,81,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,10,78,65,73,86,65,74,49,110,100,84,117,66,53,72,67,81,114,113,100,106,43,43,120,77,82,85,109,56,50,53,107,122,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,10,66,65,77,75,65,81,69,119,77,119,73,85,78,76,43,55,101,104,50,99,86,111,70,72,52,82,105,50,70,80,101,51,98,116,80,118,97,78,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,104,100,80,74,79,66,116,51,112,43,66,78,69,90,121,101,87,116,90,48,110,47,80,47,113,52,99,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,107,52,104,56,112,69,69,101,101,112,73,55,48,102,55,83,103,90,115,112,83,102,73,66,116,98,81,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,107,109,78,120,105,103,53,77,74,108,118,50,76,56,106,111,51,114,76,52,109,111,55,55,85,86,120,99,78,10,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,75,90,118,71,110,83,85,105,71,90,50,105,99,119,53,65,54,120,85,120,109,10,75,51,69,117,99,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,118,119,84,89,81,118,100,78,115,116,53,104,100,10,69,71,83,66,113,73,68,84,111,66,47,97,66,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,118,52,69,115,115,10,77,57,65,50,113,115,108,115,112,110,79,47,72,112,112,72,116,107,49,99,117,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,10,70,81,67,68,50,97,121,78,105,55,85,74,48,99,98,73,67,97,49,120,76,111,81,119,86,90,55,88,56,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,10,67,103,69,66,77,68,77,67,70,72,107,120,47,86,67,49,66,120,119,98,118,56,87,51,116,116,55,89,116,70,117,100,105,52,85,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,72,54,73,79,75,88,67,57,53,100,86,47,101,52,51,102,103,122,108,73,84,104,56,100,67,67,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,101,104,55,76,68,115,121,50,78,73,43,81,82,122,118,78,66,108,55,108,97,56,77,105,116,57,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,10,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,97,47,83,55,112,67,107,99,49,85,75,70,110,50,90,97,82,70,68,102,72,85,67,48,102,67,82,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,69,83,66,115,80,69,88,75,75,69,55,97,87,48,43,113,99,100,119,111,76,70,101,120,89,51,97,10,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,75,101,70,110,49,101,89,76,118,68,109,102,84,101,56,106,118,76,118,10,87,115,103,49,47,120,113,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,101,117,78,51,83,75,110,53,69,118,84,71,10,79,54,101,114,66,56,87,84,122,104,48,100,69,89,69,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,84,105,69,115,122,10,74,112,107,52,119,90,87,113,70,119,47,75,100,100,111,88,100,84,106,102,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,10,70,67,119,56,120,118,54,83,101,100,115,86,70,116,88,79,79,102,75,111,109,77,50,108,111,88,88,104,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,77,119,73,85,99,88,108,73,97,72,85,74,73,48,118,112,101,101,83,51,51,79,98,122,71,43,57,107,116,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,10,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,110,88,98,118,76,68,110,66,78,117,104,108,105,50,53,122,108,114,72,88,82,70,111,110,89,120,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,119,43,65,108,47,75,109,86,56,50,57,90,116,73,82,110,107,53,52,43,78,79,89,50,71,109,56,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,106,70,57,114,77,108,102,97,66,98,70,48,75,101,76,109,71,54,108,108,49,110,77,119,89,71,111,88,68,84,73,122,10,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,111,88,120,82,99,105,55,66,52,77,77,110,106,43,105,57,56,70,73,70,110,76,55,69,10,53,107,103,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,97,65,118,77,67,48,119,67,103,89,68,86,82,48,85,66,65,77,67,65,81,69,119,10,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,108,87,57,100,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,10,82,65,73,103,70,67,99,69,120,104,99,57,109,117,90,67,74,121,98,69,103,97,68,116,103,72,49,90,70,53,115,55,51,57,73,72,84,106,88,108,47,74,90,84,68,82,52,67,73,71,53,87,101,76,99,70,67,103,50,110,90,111,122,80,10,53,78,113,67,48,43,77,101,99,109,89,120,80,78,48,101,117,98,80,98,112,122,104,115,70,50,56,122,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"tcb_info_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"tcb_info":[123,34,116,99,98,73,110,102,111,34,58,123,34,105,100,34,58,34,83,71,88,34,44,34,118,101,114,115,105,111,110,34,58,51,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,48,56,58,49,49,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,48,56,58,49,49,90,34,44,34,102,109,115,112,99,34,58,34,48,48,54,48,54,97,48,48,48,48,48,48,34,44,34,112,99,101,73,100,34,58,34,48,48,48,48,34,44,34,116,99,98,84,121,112,101,34,58,48,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,67,111,110,102,105,103,117,114,97,116,105,111,110,65,110,100,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,67,111,110,102,105,103,117,114,97,116,105,111,110,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,48,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,49,45,48,52,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,49,48,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,51,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,48,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,51,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,55,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,49,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,53,102,101,101,55,53,54,56,52,55,49,56,98,99,98,57,49,57,49,51,49,50,99,100,51,98,102,52,55,48,57,54,97,52,48,54,56,102,52,53,48,100,50,101,99,57,101,48,53,98,56,99,100,53,97,51,97,55,99,98,54,49,98,50,57,50,54,49,50,97,55,48,56,99,52,99,53,97,51,48,52,56,51,54,99,56,50,99,51,97,55,49,57,49,52,52,55,101,51,98,97,54,57,49,101,53,57,50,56,55,99,99,57,99,56,57,52,51,101,56,50,49,55,51,52,100,52,49,34,125,0],"qe_identity_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"qe_identity":[123,34,101,110,99,108,97,118,101,73,100,101,110,116,105,116,121,34,58,123,34,105,100,34,58,34,81,69,34,44,34,118,101,114,115,105,111,110,34,58,50,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,52,56,58,52,48,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,52,56,58,52,48,90,34,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,109,105,115,99,115,101,108,101,99,116,34,58,34,48,48,48,48,48,48,48,48,34,44,34,109,105,115,99,115,101,108,101,99,116,77,97,115,107,34,58,34,70,70,70,70,70,70,70,70,34,44,34,97,116,116,114,105,98,117,116,101,115,34,58,34,49,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,97,116,116,114,105,98,117,116,101,115,77,97,115,107,34,58,34,70,66,70,70,70,70,70,70,70,70,70,70,70,70,70,70,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,109,114,115,105,103,110,101,114,34,58,34,56,67,52,70,53,55,55,53,68,55,57,54,53,48,51,69,57,54,49,51,55,70,55,55,67,54,56,65,56,50,57,65,48,48,53,54,65,67,56,68,69,68,55,48,49,52,48,66,48,56,49,66,48,57,52,52,57,48,67,53,55,66,70,70,34,44,34,105,115,118,112,114,111,100,105,100,34,58,49,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,56,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,85,112,84,111,68,97,116,101,34,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,54,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,52,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,49,49,45,49,51,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,50,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,48,53,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,56,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,48,50,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,57,55,102,102,56,57,53,55,57,55,53,98,52,48,97,97,53,49,97,49,55,55,54,53,100,55,51,52,51,54,51,98,56,99,98,55,53,53,55,101,54,54,53,55,98,48,52,102,54,51,98,54,55,99,48,53,102,50,56,56,54,98,101,49,98,55,99,99,49,52,98,57,99,49,98,56,56,57,101,48,51,98,56,53,56,54,54,101,50,55,55,97,49,48,50,101,98,57,102,98,56,53,48,50,57,98,55,48,48,56,98,52,49,55,53,52,99,100,98,97,48,49,52,97,53,97,56,99,34,125,0]}` + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC) + timeNowFunc = func() time.Time { + return expectedExpirationDate.Add(-1000 * time.Second) + } + mrSigner := "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7e" + logicaltest.Test(t, logicaltest.TestCase{ + CredentialBackend: testFactory(t), + Steps: []logicaltest.TestStep{ + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_1", quoteBase64, collateralJson), + }, + }) +} + +// Test a self-signed client that has the hashed public key in the attestation report, but the collateral is expired. +func TestBackend_basic_SGX_enclave_expired(t *testing.T) { + connState, err := testConnState("test-fixtures/keys/cert.pem", + "test-fixtures/keys/key.pem", "test-fixtures/keys/cert.pem") + if err != nil { + t.Fatalf("error testing connection state: %v", err) + } + + quoteBase64 := `AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GB2A9AU1uxwxpErEhhnbcltYAAAAACwsQD///AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAABiUazVH08oDb033tRaFfij9US1p/tNBHcZgU3kS+qv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZe/ri1/kInRdrGLXO8tgd7B/R3DMumyPFU8TgL+PkqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxhAAAPvTSIG+2X8S4ne9Zsb8a5wqVabUhgr7r3GlpScrLaGMv8RDLVr9n8O/9CfASa11lqkO1DT+JqFTu+5Mitjp2rm/ptkyoG99YfjwdzdsURZQvQCidBDdhrt1kcr+7HwTFcf1hbifB13klNa6Npsm5sc7SMgVXrVM98+zCj0+jTleCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLZrH69IGHR4/H2DCpkrZPl4lJ7yWZvpARseCwUJ/wmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGrO+CXpMIu8FYYaLb9gwNsNegCmkZgK72V9wj8LDQmJlvUfpZ+qz4tYm5HucJK8ulPfQMCRoFowZFxLlXF1EiAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAF4OAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThUQ0NCSmlnQXdJQkFnSVVEMkNQQzRleDNQcnB6UE9YRXBuVTIrNDMzYm93Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOVEV3TWpBeU5EVTJXaGNOTXpBd05URXdNakF5TkRVMgpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkR1ZQpDOFl2L1JnZ2V5cnV5cWpmUlhydk1ZRjBoUnhRd1dueW9oVXQvd2VjeUxlL2YyREdZSGk1RlNGLzZnUmlTOC9WCjZiYld6bXEycTBsZm9Mei9hMEdqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGSi95dmhxV0lBd0prOTJIbXpjSWtreWcKMUFDQU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUXFmNzBJOGRnYksweGVtaEY0TExIM3pDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUUtEbyt6dWdoCjhaY0xBME9hM3BSa2REQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEUndBdwpSQUlnRHBmZFptVE5IYnVRaFE0c0ZMSnZ5czIzY2ZxdWR1ODBZcUlEVm5ud2NPRUNJRmhUMFF2R2xqS1FSM2NvClBqOGhoSFQ5anVWYXFkM1RydE1YRDFQZEhZWHYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=` + collateralJson := `{"major_version":1,"minor_version":0,"tee_type":0,"pck_crl_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,108,106,67,67,65,106,50,103,65,119,73,66,65,103,73,86,65,74,86,118,88,99,50,57,71,43,72,112,81,69,110,74,49,80,81,122,122,103,70,88,67,57,53,85,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,10,77,71,103,120,71,106,65,89,66,103,78,86,66,65,77,77,69,85,108,117,100,71,86,115,73,70,78,72,87,67,66,83,98,50,57,48,73,69,78,66,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,10,98,51,74,119,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,10,67,81,89,68,86,81,81,71,69,119,74,86,85,122,65,101,70,119,48,120,79,68,65,49,77,106,69,120,77,68,85,119,77,84,66,97,70,119,48,122,77,122,65,49,77,106,69,120,77,68,85,119,77,84,66,97,77,72,65,120,73,106,65,103,10,66,103,78,86,66,65,77,77,71,85,108,117,100,71,86,115,73,70,78,72,87,67,66,81,81,48,115,103,85,71,120,104,100,71,90,118,99,109,48,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,10,73,69,78,118,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,10,67,122,65,74,66,103,78,86,66,65,89,84,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,78,83,66,47,55,116,50,49,108,88,83,79,10,50,67,117,122,112,120,119,55,52,101,74,66,55,50,69,121,68,71,103,87,53,114,88,67,116,120,50,116,86,84,76,113,54,104,75,107,54,122,43,85,105,82,90,67,110,113,82,55,112,115,79,118,103,113,70,101,83,120,108,109,84,108,74,108,10,101,84,109,105,50,87,89,122,51,113,79,66,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,10,66,103,78,86,72,82,56,69,83,122,66,74,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,10,100,109,108,106,90,88,77,117,97,87,53,48,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,108,87,57,100,10,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,10,65,102,56,67,65,81,65,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,82,65,73,103,88,115,86,107,105,48,119,43,105,54,86,89,71,87,51,85,70,47,50,50,117,97,88,101,48,89,74,68,106,49,85,101,10,110,65,43,84,106,68,49,97,105,53,99,67,73,67,89,98,49,83,65,109,68,53,120,107,102,84,86,112,118,111,52,85,111,121,105,83,89,120,114,68,87,76,109,85,82,52,67,73,57,78,75,121,102,80,78,43,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"root_ca_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,66,73,84,67,66,121,65,73,66,65,84,65,75,66,103,103,113,104,107,106,79,80,81,81,68,65,106,66,111,77,82,111,119,71,65,89,68,86,81,81,68,68,66,70,74,98,110,82,108,98,67,66,84,82,49,103,103,85,109,57,118,10,100,67,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,66,65,99,77,67,49,78,104,98,110,82,104,10,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,81,119,77,122,69,119,77,106,73,49,77,86,111,88,10,68,84,73,48,77,68,81,119,77,106,69,119,77,106,73,49,77,86,113,103,76,122,65,116,77,65,111,71,65,49,85,100,70,65,81,68,65,103,69,66,77,66,56,71,65,49,85,100,73,119,81,89,77,66,97,65,70,67,74,108,68,78,90,97,10,110,84,83,74,56,52,79,48,108,86,75,47,85,66,115,53,74,119,97,115,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,65,48,103,65,77,69,85,67,73,70,70,88,102,85,102,90,43,54,70,88,116,108,56,101,116,102,82,108,10,101,55,120,101,86,115,121,118,99,49,111,68,56,98,108,106,49,119,83,65,87,114,69,89,65,105,69,65,107,53,65,86,55,66,89,50,53,43,114,54,88,48,74,115,72,107,65,109,82,56,90,122,69,121,116,111,85,77,113,57,97,77,55,50,10,117,116,100,111,75,103,77,61,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"pck_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,75,89,84,67,67,67,103,103,67,65,81,69,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,99,68,69,105,77,67,65,71,65,49,85,69,65,119,119,90,83,87,53,48,90,87,119,103,85,48,100,89,73,70,66,68,10,83,121,66,81,98,71,70,48,90,109,57,121,98,83,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,10,66,65,99,77,67,49,78,104,98,110,82,104,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,88,68,84,73,122,77,68,89,120,77,106,73,120,77,68,65,119,77,49,111,119,103,103,107,48,77,68,77,67,70,71,47,68,84,108,65,106,53,121,105,83,78,68,88,87,71,113,83,52,80,71,71,66,10,90,113,48,49,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,79,43,117,98,112,99,86,47,75,69,55,104,43,77,122,10,54,67,89,101,49,116,109,81,113,83,97,116,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,80,49,103,104,107,104,105,10,110,76,112,122,66,52,116,78,83,83,57,76,80,113,100,66,114,81,106,78,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,10,65,73,114,53,74,66,104,79,72,86,114,57,51,88,80,68,49,106,111,83,57,101,105,49,99,51,53,87,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,78,65,73,86,65,76,69,108,101,88,106,80,113,99,122,100,66,49,109,114,43,77,88,75,99,118,114,106,112,52,113,98,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,100,80,54,109,70,75,108,121,118,103,52,111,81,47,73,70,109,68,87,66,72,116,104,121,43,98,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,43,99,84,118,86,114,79,114,83,78,86,51,52,81,105,54,55,102,83,47,105,65,70,67,70,76,107,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,72,101,66,51,106,53,53,102,120,80,75,72,106,122,68,87,115,72,121,97,77,79,97,122,67,120,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,78,52,107,74,80,108,121,122,113,108,80,56,106,109,84,102,48,50,65,119,108,65,112,51,87,10,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,119,122,71,101,85,81,109,50,82,81,102,84,122,120,69,121,122,103,10,65,48,110,118,85,110,77,90,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,78,56,73,49,49,97,50,97,110,83,88,10,57,68,116,98,116,89,114,97,66,78,80,48,57,54,107,51,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,75,75,57,73,10,87,50,122,50,102,107,67,97,79,100,88,76,87,117,53,70,109,80,101,111,43,110,115,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,10,65,104,85,65,43,52,115,116,114,115,67,83,121,116,113,75,113,98,120,80,56,118,72,67,68,81,78,71,90,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,10,65,119,111,66,65,84,65,48,65,104,85,65,122,85,104,81,114,70,75,57,122,71,109,109,112,118,66,89,121,76,120,88,117,57,67,49,43,71,81,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,109,85,51,84,90,109,57,83,100,102,117,65,88,53,88,100,65,114,49,81,121,121,90,53,50,75,48,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,65,104,78,112,65,67,85,105,100,78,107,68,88,117,51,49,82,88,82,105,43,116,68,118,84,66,99,78,77,106,77,119,78,84,69,122,10,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,72,121,118,51,80,106,109,48,52,69,113,105,102,89,65,98,49,122,48,107,77,90,116,98,43,65,70,119,48,121,10,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,79,90,75,43,104,82,117,87,107,67,55,47,79,74,87,101,98,67,55,47,71,119,90,82,10,112,76,85,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,82,106,110,120,79,97,85,69,68,57,122,47,71,82,54,75,84,55,10,71,47,67,71,55,87,65,53,99,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,86,110,86,77,47,107,107,110,99,10,72,108,69,49,82,77,51,73,77,76,56,90,116,47,72,122,65,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,65,47,97,10,81,54,65,76,97,79,112,53,116,56,76,101,114,113,119,76,83,89,118,102,115,113,43,81,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,10,78,65,73,86,65,74,49,110,100,84,117,66,53,72,67,81,114,113,100,106,43,43,120,77,82,85,109,56,50,53,107,122,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,10,66,65,77,75,65,81,69,119,77,119,73,85,78,76,43,55,101,104,50,99,86,111,70,72,52,82,105,50,70,80,101,51,98,116,80,118,97,78,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,104,100,80,74,79,66,116,51,112,43,66,78,69,90,121,101,87,116,90,48,110,47,80,47,113,52,99,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,107,52,104,56,112,69,69,101,101,112,73,55,48,102,55,83,103,90,115,112,83,102,73,66,116,98,81,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,107,109,78,120,105,103,53,77,74,108,118,50,76,56,106,111,51,114,76,52,109,111,55,55,85,86,120,99,78,10,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,75,90,118,71,110,83,85,105,71,90,50,105,99,119,53,65,54,120,85,120,109,10,75,51,69,117,99,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,118,119,84,89,81,118,100,78,115,116,53,104,100,10,69,71,83,66,113,73,68,84,111,66,47,97,66,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,118,52,69,115,115,10,77,57,65,50,113,115,108,115,112,110,79,47,72,112,112,72,116,107,49,99,117,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,10,70,81,67,68,50,97,121,78,105,55,85,74,48,99,98,73,67,97,49,120,76,111,81,119,86,90,55,88,56,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,10,67,103,69,66,77,68,77,67,70,72,107,120,47,86,67,49,66,120,119,98,118,56,87,51,116,116,55,89,116,70,117,100,105,52,85,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,72,54,73,79,75,88,67,57,53,100,86,47,101,52,51,102,103,122,108,73,84,104,56,100,67,67,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,101,104,55,76,68,115,121,50,78,73,43,81,82,122,118,78,66,108,55,108,97,56,77,105,116,57,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,10,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,97,47,83,55,112,67,107,99,49,85,75,70,110,50,90,97,82,70,68,102,72,85,67,48,102,67,82,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,69,83,66,115,80,69,88,75,75,69,55,97,87,48,43,113,99,100,119,111,76,70,101,120,89,51,97,10,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,75,101,70,110,49,101,89,76,118,68,109,102,84,101,56,106,118,76,118,10,87,115,103,49,47,120,113,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,101,117,78,51,83,75,110,53,69,118,84,71,10,79,54,101,114,66,56,87,84,122,104,48,100,69,89,69,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,84,105,69,115,122,10,74,112,107,52,119,90,87,113,70,119,47,75,100,100,111,88,100,84,106,102,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,10,70,67,119,56,120,118,54,83,101,100,115,86,70,116,88,79,79,102,75,111,109,77,50,108,111,88,88,104,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,77,119,73,85,99,88,108,73,97,72,85,74,73,48,118,112,101,101,83,51,51,79,98,122,71,43,57,107,116,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,10,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,110,88,98,118,76,68,110,66,78,117,104,108,105,50,53,122,108,114,72,88,82,70,111,110,89,120,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,119,43,65,108,47,75,109,86,56,50,57,90,116,73,82,110,107,53,52,43,78,79,89,50,71,109,56,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,106,70,57,114,77,108,102,97,66,98,70,48,75,101,76,109,71,54,108,108,49,110,77,119,89,71,111,88,68,84,73,122,10,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,111,88,120,82,99,105,55,66,52,77,77,110,106,43,105,57,56,70,73,70,110,76,55,69,10,53,107,103,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,97,65,118,77,67,48,119,67,103,89,68,86,82,48,85,66,65,77,67,65,81,69,119,10,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,108,87,57,100,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,10,82,65,73,103,70,67,99,69,120,104,99,57,109,117,90,67,74,121,98,69,103,97,68,116,103,72,49,90,70,53,115,55,51,57,73,72,84,106,88,108,47,74,90,84,68,82,52,67,73,71,53,87,101,76,99,70,67,103,50,110,90,111,122,80,10,53,78,113,67,48,43,77,101,99,109,89,120,80,78,48,101,117,98,80,98,112,122,104,115,70,50,56,122,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"tcb_info_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"tcb_info":[123,34,116,99,98,73,110,102,111,34,58,123,34,105,100,34,58,34,83,71,88,34,44,34,118,101,114,115,105,111,110,34,58,51,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,48,56,58,49,49,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,48,56,58,49,49,90,34,44,34,102,109,115,112,99,34,58,34,48,48,54,48,54,97,48,48,48,48,48,48,34,44,34,112,99,101,73,100,34,58,34,48,48,48,48,34,44,34,116,99,98,84,121,112,101,34,58,48,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,67,111,110,102,105,103,117,114,97,116,105,111,110,65,110,100,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,67,111,110,102,105,103,117,114,97,116,105,111,110,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,48,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,49,45,48,52,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,49,48,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,51,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,48,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,51,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,55,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,49,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,53,102,101,101,55,53,54,56,52,55,49,56,98,99,98,57,49,57,49,51,49,50,99,100,51,98,102,52,55,48,57,54,97,52,48,54,56,102,52,53,48,100,50,101,99,57,101,48,53,98,56,99,100,53,97,51,97,55,99,98,54,49,98,50,57,50,54,49,50,97,55,48,56,99,52,99,53,97,51,48,52,56,51,54,99,56,50,99,51,97,55,49,57,49,52,52,55,101,51,98,97,54,57,49,101,53,57,50,56,55,99,99,57,99,56,57,52,51,101,56,50,49,55,51,52,100,52,49,34,125,0],"qe_identity_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"qe_identity":[123,34,101,110,99,108,97,118,101,73,100,101,110,116,105,116,121,34,58,123,34,105,100,34,58,34,81,69,34,44,34,118,101,114,115,105,111,110,34,58,50,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,52,56,58,52,48,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,52,56,58,52,48,90,34,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,109,105,115,99,115,101,108,101,99,116,34,58,34,48,48,48,48,48,48,48,48,34,44,34,109,105,115,99,115,101,108,101,99,116,77,97,115,107,34,58,34,70,70,70,70,70,70,70,70,34,44,34,97,116,116,114,105,98,117,116,101,115,34,58,34,49,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,97,116,116,114,105,98,117,116,101,115,77,97,115,107,34,58,34,70,66,70,70,70,70,70,70,70,70,70,70,70,70,70,70,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,109,114,115,105,103,110,101,114,34,58,34,56,67,52,70,53,55,55,53,68,55,57,54,53,48,51,69,57,54,49,51,55,70,55,55,67,54,56,65,56,50,57,65,48,48,53,54,65,67,56,68,69,68,55,48,49,52,48,66,48,56,49,66,48,57,52,52,57,48,67,53,55,66,70,70,34,44,34,105,115,118,112,114,111,100,105,100,34,58,49,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,56,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,85,112,84,111,68,97,116,101,34,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,54,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,52,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,49,49,45,49,51,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,50,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,48,53,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,56,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,48,50,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,57,55,102,102,56,57,53,55,57,55,53,98,52,48,97,97,53,49,97,49,55,55,54,53,100,55,51,52,51,54,51,98,56,99,98,55,53,53,55,101,54,54,53,55,98,48,52,102,54,51,98,54,55,99,48,53,102,50,56,56,54,98,101,49,98,55,99,99,49,52,98,57,99,49,98,56,56,57,101,48,51,98,56,53,56,54,54,101,50,55,55,97,49,48,50,101,98,57,102,98,56,53,48,50,57,98,55,48,48,56,98,52,49,55,53,52,99,100,98,97,48,49,52,97,53,97,56,99,34,125,0]}` + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC) + timeNowFunc = func() time.Time { + return expectedExpirationDate.Add(1 * time.Second) + } + mrSigner := "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7e" + logicaltest.Test(t, logicaltest.TestCase{ + CredentialBackend: testFactory(t), + Steps: []logicaltest.TestStep{ + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithNameInvalid(t, connState, "tee_app_1", quoteBase64, collateralJson), + }, + }) +} + +func testAccStepLoginWithName(t *testing.T, connState tls.ConnectionState, teeName string, quote string, collateral string) logicaltest.TestStep { + return logicaltest.TestStep{ + Operation: logical.UpdateOperation, + Path: "login", + Unauthenticated: true, + ConnState: &connState, + Check: func(resp *logical.Response) error { + if resp.Auth.TTL != 1000*time.Second { + t.Fatalf("%#v != bad lease length: %#v", 1000*time.Second, resp.Auth) + } + + if teeName != "" && resp.Auth.DisplayName != ("mnt-"+teeName) { + t.Fatalf("matched the wrong Tee: %#v", resp.Auth.DisplayName) + } + + fn := logicaltest.TestCheckAuth([]string{"default", "foo"}) + return fn(resp) + }, + Data: map[string]interface{}{ + "name": teeName, + "type": "sgx", + "quote": quote, + "collateral": collateral, + }, + } +} + +func testAccStepLoginWithNameInvalid(_ *testing.T, connState tls.ConnectionState, teeName string, quote string, collateral string) logicaltest.TestStep { + return logicaltest.TestStep{ + Operation: logical.UpdateOperation, + Path: "login", + Unauthenticated: true, + ConnState: &connState, + Check: func(resp *logical.Response) error { + if resp.Auth != nil { + return fmt.Errorf("should not be authorized: %#v", resp) + } + return nil + }, + Data: map[string]interface{}{ + "name": teeName, + "type": "sgx", + "quote": quote, + "collateral": collateral, + }, + ErrorOk: true, + } +} + +func testAccStepTEE(_ *testing.T, name string, types string, mrSigner string, mrEnclave string, allowedTcbLevels string, policies string, expectError bool) logicaltest.TestStep { + data := map[string]interface{}{ + "name": name, + "types": types, + "sgx_mrsigner": mrSigner, + "sgx_mrenclave": mrEnclave, + "sgx_allowed_tcb_levels": allowedTcbLevels, + "token_policies": policies, + "lease": 1000, + } + return logicaltest.TestStep{ + Operation: logical.UpdateOperation, + Path: "tees/" + name, + ErrorOk: expectError, + Data: data, + Check: func(resp *logical.Response) error { + if resp == nil && expectError { + return fmt.Errorf("expected error but received nil") + } + return nil + }, + } +} + +func testConnState(certPath, keyPath, rootCertPath string) (tls.ConnectionState, error) { + cert, err := tls.LoadX509KeyPair(certPath, keyPath) + if err != nil { + return tls.ConnectionState{}, err + } + rootConfig := &rootcerts.Config{ + CAFile: rootCertPath, + } + rootCAs, err := rootcerts.LoadCACerts(rootConfig) + if err != nil { + return tls.ConnectionState{}, err + } + listenConf := &tls.Config{ + Certificates: []tls.Certificate{cert}, + ClientAuth: tls.RequestClientCert, + InsecureSkipVerify: false, + RootCAs: rootCAs, + } + dialConf := listenConf.Clone() + // start a server + list, err := tls.Listen("tcp", "127.0.0.1:0", listenConf) + if err != nil { + return tls.ConnectionState{}, err + } + defer list.Close() + + // Accept connections. + serverErrors := make(chan error, 1) + connState := make(chan tls.ConnectionState) + go func() { + defer close(connState) + serverConn, err := list.Accept() + serverErrors <- err + if err != nil { + close(serverErrors) + return + } + defer serverConn.Close() + + // Read the ping + buf := make([]byte, 4) + _, err = serverConn.Read(buf) + if (err != nil) && (err != io.EOF) { + serverErrors <- err + close(serverErrors) + return + } else { + // EOF is a reasonable error condition, so swallow it. + serverErrors <- nil + } + close(serverErrors) + connState <- serverConn.(*tls.Conn).ConnectionState() + }() + + // Establish a connection from the client side and write a few bytes. + clientErrors := make(chan error, 1) + go func() { + addr := list.Addr().String() + conn, err := tls.Dial("tcp", addr, dialConf) + clientErrors <- err + if err != nil { + close(clientErrors) + return + } + defer conn.Close() + + // Write ping + _, err = conn.Write([]byte("ping")) + clientErrors <- err + close(clientErrors) + }() + + for err = range clientErrors { + if err != nil { + return tls.ConnectionState{}, fmt.Errorf("error in client goroutine:%v", err) + } + } + + for err = range serverErrors { + if err != nil { + return tls.ConnectionState{}, fmt.Errorf("error in server goroutine:%v", err) + } + } + // Grab the current state + return <-connState, nil +} diff --git a/tee/path_info.go b/tee/path_info.go new file mode 100644 index 0000000..18a6cdf --- /dev/null +++ b/tee/path_info.go @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import ( + "context" + + "github.com/hashicorp/vault/sdk/framework" + "github.com/hashicorp/vault/sdk/logical" + + "github.com/matter-labs/vault-auth-tee/version" +) + +func pathInfo(b *backend) *framework.Path { + return &framework.Path{ + Pattern: "info", + HelpSynopsis: "Display information about the plugin", + HelpDescription: ` + +Displays information about the plugin, such as the plugin version and where to +get help. + +`, + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.ReadOperation: b.pathInfoRead, + }, + } +} + +// pathInfoRead corresponds to READ auth/tee/info. +func (b *backend) pathInfoRead(ctx context.Context, req *logical.Request, _ *framework.FieldData) (*logical.Response, error) { + return &logical.Response{ + Data: map[string]interface{}{ + "name": version.Name, + "version": version.Version, + }, + }, nil +} diff --git a/tee/path_login.go b/tee/path_login.go new file mode 100644 index 0000000..c929817 --- /dev/null +++ b/tee/path_login.go @@ -0,0 +1,417 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import ( + "bytes" + "context" + "crypto/sha256" + "crypto/x509" + "encoding/base64" + "encoding/binary" + "encoding/hex" + "encoding/json" + "fmt" + "strings" + "time" + + "github.com/hashicorp/vault/sdk/framework" + "github.com/hashicorp/vault/sdk/helper/cidrutil" + "github.com/hashicorp/vault/sdk/helper/policyutil" + "github.com/hashicorp/vault/sdk/logical" + + "github.com/matter-labs/vault-auth-tee/ratee" +) + +var timeNowFunc = time.Now + +func pathLogin(b *backend) *framework.Path { + return &framework.Path{ + Pattern: "login", + DisplayAttrs: &framework.DisplayAttributes{ + OperationPrefix: operationPrefixTee, + OperationVerb: "login", + }, + Fields: map[string]*framework.FieldSchema{ + "name": { + Type: framework.TypeString, + Description: "The name of the tee role to authenticate against.", + }, + "type": { + Type: framework.TypeString, + Description: "The type of the TEE.", + }, + "quote": { + Type: framework.TypeString, + Description: "The quote Base64 encoded.", + }, + "collateral": { + Type: framework.TypeString, + Description: "The collateral Json encoded.", + }, + "challenge": { + Type: framework.TypeString, + Description: "Hex encoded bytes to include in the attestation report of the vault quote", + }, + }, + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.UpdateOperation: b.loginPathWrapper(b.pathLogin), + logical.AliasLookaheadOperation: b.pathLoginAliasLookahead, + logical.ResolveRoleOperation: b.loginPathWrapper(b.pathLoginResolveRole), + }, + } +} + +func (b *backend) loginPathWrapper(wrappedOp func(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error)) framework.OperationFunc { + return func(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + return wrappedOp(ctx, req, data) + } +} + +func (b *backend) pathLoginResolveRole(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + quoteBase64 := data.Get("quote").(string) + if quoteBase64 == "" { + return nil, fmt.Errorf("missing quote") + } + + quoteBytes, err := base64.StdEncoding.DecodeString(quoteBase64) + if err != nil { + return logical.ErrorResponse("quote decode error"), nil + } + + var quote = ratee.Quote{} + var byteReader = bytes.NewReader(quoteBytes) + err = binary.Read(byteReader, binary.BigEndian, "e) + if err != nil { + return logical.ErrorResponse("quote decode error"), nil + } + + names, err := req.Storage.List(ctx, "tee/") + if err != nil { + return logical.ErrorResponse("no TEE was matched by this request"), nil + } + + rb := quote.ReportBody + + mrSignerHex := hex.EncodeToString(rb.MrSigner[:]) + mrEnclaveHex := hex.EncodeToString(rb.MrEnclave[:]) + + for _, name := range names { + entry, err := b.Tee(ctx, req.Storage, strings.TrimPrefix(name, "tee/")) + if err != nil { + b.Logger().Error("failed to load trusted tee", "name", name, "error", err) + continue + } + if entry == nil { + // This could happen when the name was provided and the tee doesn't exist, + // or just if between the LIST and the GET the tee was deleted. + continue + } + + if entry.SgxMrsigner != "" && entry.SgxMrsigner != mrSignerHex { + continue + } + if entry.SgxMrenclave != "" && entry.SgxMrenclave != mrEnclaveHex { + continue + } + if entry.SgxIsvProdid != int(binary.LittleEndian.Uint16(rb.IsvProdid[:])) { + continue + } + return logical.ResolveRoleResponse(name) + } + return logical.ErrorResponse("no TEE was matched by this request"), nil +} + +func (b *backend) pathLoginAliasLookahead(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + name := d.Get("name").(string) + if name == "" { + return nil, fmt.Errorf("missing name") + } + + return &logical.Response{ + Auth: &logical.Auth{ + Alias: &logical.Alias{ + Name: name, + }, + }, + }, nil + +} + +func hashPublicKey256(pub interface{}) ([]byte, error) { + pubBytes, err := x509.MarshalPKIXPublicKey(pub) + if err != nil { + return nil, err + } + result := sha256.Sum256(pubBytes) + return result[:], nil +} + +func Contains[T comparable](s []T, e T) bool { + for _, v := range s { + if v == e { + return true + } + } + return false +} + +func (b *backend) pathLogin(ctx context.Context, req *logical.Request, data *framework.FieldData) (*logical.Response, error) { + name := data.Get("name").(string) + if name == "" { + return nil, fmt.Errorf("missing name") + } + + // Allow constraining the login request to a single TeeEntry + entry, err := b.Tee(ctx, req.Storage, strings.TrimPrefix(name, "tee/")) + + if err != nil { + return logical.ErrorResponse(fmt.Sprintf("no TEE matching for this login name; additionally got errors during verification: %v", err)), nil + } + + if entry == nil { + return logical.ErrorResponse(fmt.Sprintf("no TEE matching for this login name")), nil + } + + // Get the connection state + if req.Connection == nil || req.Connection.ConnState == nil { + return logical.ErrorResponse("tls connection required"), nil + } + connState := req.Connection.ConnState + + if connState.PeerCertificates == nil || len(connState.PeerCertificates) == 0 { + return logical.ErrorResponse("client certificate must be supplied"), nil + } + + clientCert := connState.PeerCertificates[0] + + // verify self-signed certificate + roots := x509.NewCertPool() + roots.AddCert(clientCert) + _, err = clientCert.Verify(x509.VerifyOptions{Roots: roots}) + if err != nil { + return logical.ErrorResponse("client certificate must be self-signed"), nil + } + + if len(entry.TokenBoundCIDRs) > 0 { + if req.Connection == nil { + b.Logger().Warn("token bound CIDRs found but no connection information available for validation") + return nil, logical.ErrPermissionDenied + } + if !cidrutil.RemoteAddrIsOk(req.Connection.RemoteAddr, entry.TokenBoundCIDRs) { + return nil, logical.ErrPermissionDenied + } + } + + if clientCert.PublicKey == nil { + return logical.ErrorResponse("no public key found in client certificate"), nil + } + + hashClientPk, err := hashPublicKey256(clientCert.PublicKey) + + if err != nil { + return logical.ErrorResponse("error hashing public key"), nil + } + + teeType := data.Get("type").(string) + + if _, ok := entry.Types[teeType]; !ok { + return logical.ErrorResponse(fmt.Sprintf("type `%s` not supported for `%s`", teeType, name)), nil + } + + quote := data.Get("quote").(string) + quoteBytes, err := base64.StdEncoding.DecodeString(quote) + if err != nil { + return logical.ErrorResponse("quote decode error"), nil + } + + // Do a quick check of the quote before doing the expensive verification + var quoteStart = ratee.Quote{} + var byteReader = bytes.NewReader(quoteBytes) + err = binary.Read(byteReader, binary.BigEndian, "eStart) + if err != nil { + return logical.ErrorResponse("quote decode error"), nil + } + reportBody := quoteStart.ReportBody + + if !bytes.Equal(reportBody.ReportData[:32], hashClientPk) { + return logical.ErrorResponse("client certificate's hashed public key not in report data of attestation quote report"), nil + } + + mrSignerHex := hex.EncodeToString(reportBody.MrSigner[:]) + mrEnclaveHex := hex.EncodeToString(reportBody.MrEnclave[:]) + + if entry.SgxMrsigner != "" && entry.SgxMrsigner != mrSignerHex { + return logical.ErrorResponse("`sgx_mrsigner` does not match"), nil + } + if entry.SgxMrenclave != "" && entry.SgxMrenclave != mrEnclaveHex { + return logical.ErrorResponse("`sgx_mrenclave` does not match"), nil + } + if entry.SgxIsvProdid != int(binary.LittleEndian.Uint16(reportBody.IsvProdid[:])) { + return logical.ErrorResponse("`sgx_isv_prodid` does not match"), nil + } + if entry.SgxMinIsvSvn > int(binary.LittleEndian.Uint16(reportBody.IsvSvn[:])) { + return logical.ErrorResponse("`sgx_isv_svn` too low"), nil + } + + // Decode the collateral + jsonCollateralBlob := data.Get("collateral").(string) + var collateral ratee.TeeQvCollateral + err = json.Unmarshal([]byte(jsonCollateralBlob), &collateral) + if err != nil { + return logical.ErrorResponse("collateral unmarshal error"), nil + } + + // Do the actual remote attestation verification + result, err := ratee.SgxVerifyRemoteReportCollateral(quoteBytes, collateral, timeNowFunc().Unix()) + if err != nil { + return logical.ErrorResponse("sgx verify error"), nil + } + + if result.CollateralExpired { + return logical.ErrorResponse("collateral expired"), nil + } + + if result.VerificationResult != ratee.SgxQlQvResultOk { + if entry.SgxAllowedTcbLevels[result.VerificationResult] != true { + return logical.ErrorResponse("invalid TCB state %v", result.VerificationResult), nil + } + } + + skid := base64.StdEncoding.EncodeToString(clientCert.SubjectKeyId) + akid := base64.StdEncoding.EncodeToString(clientCert.AuthorityKeyId) + pkid := base64.StdEncoding.EncodeToString(hashClientPk) + + expirationDate := time.Unix(result.EarliestExpirationDate, 0) + metadata := map[string]string{ + "tee_name": entry.Name, + "collateral_expiration_date": expirationDate.Format(time.RFC3339), + } + + auth := &logical.Auth{ + InternalData: map[string]interface{}{ + "subject_key_id": skid, + "authority_key_id": akid, + "hash_public_key": pkid, + }, + Alias: &logical.Alias{ + Name: entry.Name, + }, + DisplayName: entry.DisplayName, + Metadata: metadata, + } + + entry.PopulateTokenAuth(auth) + + now := timeNowFunc() + + if !now.Add(auth.TTL).After(expirationDate) { + auth.TTL = expirationDate.Sub(now) + } + + if !now.Add(auth.MaxTTL).After(expirationDate) { + auth.MaxTTL = expirationDate.Sub(now) + } + + respData := make(map[string]interface{}) + + challenge := data.Get("challenge").(string) + if challenge != "" { + challengeBytes, err := hex.DecodeString(challenge) + if err != nil { + return logical.ErrorResponse("challenge decode error"), nil + } + + ourQuote, err := ratee.SgxGetQuote(challengeBytes) + if err != nil { + return logical.ErrorResponse("vault quote error"), nil + } + + quoteBase64 := base64.StdEncoding.EncodeToString(ourQuote) + + respData["quote"] = quoteBase64 + + collateral, err := ratee.SgxGetCollateral(ourQuote) + if err != nil { + return logical.ErrorResponse("vault collateral error"), nil + } + + collateralJson, err := json.Marshal(collateral) + if err != nil { + return logical.ErrorResponse("vault collateral json error"), nil + } + + respData["collateral"] = string(collateralJson) + } + + return &logical.Response{ + Auth: auth, + Data: respData, + }, nil +} + +func (b *backend) pathLoginRenew(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + clientCerts := req.Connection.ConnState.PeerCertificates + if len(clientCerts) == 0 { + return logical.ErrorResponse("no client certificate found"), nil + } + hashClientPk, err := hashPublicKey256(clientCerts[0].PublicKey) + if err != nil { + return logical.ErrorResponse("error hashing public key"), nil + } + skid := base64.StdEncoding.EncodeToString(clientCerts[0].SubjectKeyId) + akid := base64.StdEncoding.EncodeToString(clientCerts[0].AuthorityKeyId) + pkid := base64.StdEncoding.EncodeToString(hashClientPk) + + // Certificate should not only match a registered tee policy. + // Also, the identity of the certificate presented should match the identity of the certificate used during login + if req.Auth.InternalData["subject_key_id"] != skid && req.Auth.InternalData["authority_key_id"] != akid && req.Auth.InternalData["hash_public_key"] != pkid { + return nil, fmt.Errorf("client identity during renewal not matching client identity used during login") + } + + // Get the tee and use its TTL + tee, err := b.Tee(ctx, req.Storage, req.Auth.Metadata["tee_name"]) + if err != nil { + return nil, err + } + if tee == nil { + // User no longer exists, do not renew + return nil, nil + } + + if !policyutil.EquivalentPolicies(tee.TokenPolicies, req.Auth.TokenPolicies) { + return nil, fmt.Errorf("policies have changed, not renewing") + } + + expirationDate, err := time.Parse(time.RFC3339, req.Auth.Metadata["collateral_expiration_date"]) + if err != nil { + return logical.ErrorResponse("error parsing `collateral_expiration_date` metadata"), nil + } + + now := timeNowFunc() + + if expirationDate.Before(now) { + return logical.ErrorResponse("Collateral expired"), nil + } + + resp := &logical.Response{Auth: req.Auth} + + fmt.Errorf("XXXXXXXX: tee.TokenTTL: %v\n", tee.TokenTTL) + + if now.Add(tee.TokenTTL).After(expirationDate) { + resp.Auth.TTL = tee.TokenTTL + } else { + resp.Auth.TTL = expirationDate.Sub(now) + } + + if now.Add(tee.TokenMaxTTL).After(expirationDate) { + resp.Auth.MaxTTL = tee.TokenMaxTTL + } else { + resp.Auth.MaxTTL = expirationDate.Sub(now) + } + + resp.Auth.Period = tee.TokenPeriod + return resp, nil +} diff --git a/tee/path_login_test.go b/tee/path_login_test.go new file mode 100644 index 0000000..eed59b4 --- /dev/null +++ b/tee/path_login_test.go @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "net/http" + "strings" + "testing" + "time" + + logicaltest "github.com/hashicorp/vault/helper/testhelpers/logical" + "github.com/hashicorp/vault/sdk/logical" +) + +var ocspPort int + +var source InMemorySource + +type testLogger struct{} + +func (t *testLogger) Log(args ...any) { + fmt.Printf("%v", args) +} + +func TestMain(m *testing.M) { + source = make(InMemorySource) + + listener, err := net.Listen("tcp", ":0") + if err != nil { + return + } + + ocspPort = listener.Addr().(*net.TCPAddr).Port + srv := &http.Server{ + Addr: "localhost:0", + Handler: NewResponder(&testLogger{}, source, nil), + } + go func() { + srv.Serve(listener) + }() + defer srv.Shutdown(context.Background()) + m.Run() +} + +func TestTee_RoleResolve(t *testing.T) { + connState, err := testConnState("test-fixtures/keys/cert.pem", + "test-fixtures/keys/key.pem", "test-fixtures/keys/cert.pem") + if err != nil { + t.Fatalf("error testing connection state: %v", err) + } + + quoteBase64 := `AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GB2A9AU1uxwxpErEhhnbcltYAAAAACwsQD///AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAABiUazVH08oDb033tRaFfij9US1p/tNBHcZgU3kS+qv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZe/ri1/kInRdrGLXO8tgd7B/R3DMumyPFU8TgL+PkqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxhAAAPvTSIG+2X8S4ne9Zsb8a5wqVabUhgr7r3GlpScrLaGMv8RDLVr9n8O/9CfASa11lqkO1DT+JqFTu+5Mitjp2rm/ptkyoG99YfjwdzdsURZQvQCidBDdhrt1kcr+7HwTFcf1hbifB13klNa6Npsm5sc7SMgVXrVM98+zCj0+jTleCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLZrH69IGHR4/H2DCpkrZPl4lJ7yWZvpARseCwUJ/wmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGrO+CXpMIu8FYYaLb9gwNsNegCmkZgK72V9wj8LDQmJlvUfpZ+qz4tYm5HucJK8ulPfQMCRoFowZFxLlXF1EiAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAF4OAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThUQ0NCSmlnQXdJQkFnSVVEMkNQQzRleDNQcnB6UE9YRXBuVTIrNDMzYm93Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOVEV3TWpBeU5EVTJXaGNOTXpBd05URXdNakF5TkRVMgpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkR1ZQpDOFl2L1JnZ2V5cnV5cWpmUlhydk1ZRjBoUnhRd1dueW9oVXQvd2VjeUxlL2YyREdZSGk1RlNGLzZnUmlTOC9WCjZiYld6bXEycTBsZm9Mei9hMEdqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGSi95dmhxV0lBd0prOTJIbXpjSWtreWcKMUFDQU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUXFmNzBJOGRnYksweGVtaEY0TExIM3pDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUUtEbyt6dWdoCjhaY0xBME9hM3BSa2REQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEUndBdwpSQUlnRHBmZFptVE5IYnVRaFE0c0ZMSnZ5czIzY2ZxdWR1ODBZcUlEVm5ud2NPRUNJRmhUMFF2R2xqS1FSM2NvClBqOGhoSFQ5anVWYXFkM1RydE1YRDFQZEhZWHYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=` + collateralJson := `{"major_version":1,"minor_version":0,"tee_type":0,"pck_crl_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,108,106,67,67,65,106,50,103,65,119,73,66,65,103,73,86,65,74,86,118,88,99,50,57,71,43,72,112,81,69,110,74,49,80,81,122,122,103,70,88,67,57,53,85,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,10,77,71,103,120,71,106,65,89,66,103,78,86,66,65,77,77,69,85,108,117,100,71,86,115,73,70,78,72,87,67,66,83,98,50,57,48,73,69,78,66,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,10,98,51,74,119,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,10,67,81,89,68,86,81,81,71,69,119,74,86,85,122,65,101,70,119,48,120,79,68,65,49,77,106,69,120,77,68,85,119,77,84,66,97,70,119,48,122,77,122,65,49,77,106,69,120,77,68,85,119,77,84,66,97,77,72,65,120,73,106,65,103,10,66,103,78,86,66,65,77,77,71,85,108,117,100,71,86,115,73,70,78,72,87,67,66,81,81,48,115,103,85,71,120,104,100,71,90,118,99,109,48,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,10,73,69,78,118,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,10,67,122,65,74,66,103,78,86,66,65,89,84,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,78,83,66,47,55,116,50,49,108,88,83,79,10,50,67,117,122,112,120,119,55,52,101,74,66,55,50,69,121,68,71,103,87,53,114,88,67,116,120,50,116,86,84,76,113,54,104,75,107,54,122,43,85,105,82,90,67,110,113,82,55,112,115,79,118,103,113,70,101,83,120,108,109,84,108,74,108,10,101,84,109,105,50,87,89,122,51,113,79,66,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,10,66,103,78,86,72,82,56,69,83,122,66,74,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,10,100,109,108,106,90,88,77,117,97,87,53,48,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,108,87,57,100,10,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,10,65,102,56,67,65,81,65,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,82,65,73,103,88,115,86,107,105,48,119,43,105,54,86,89,71,87,51,85,70,47,50,50,117,97,88,101,48,89,74,68,106,49,85,101,10,110,65,43,84,106,68,49,97,105,53,99,67,73,67,89,98,49,83,65,109,68,53,120,107,102,84,86,112,118,111,52,85,111,121,105,83,89,120,114,68,87,76,109,85,82,52,67,73,57,78,75,121,102,80,78,43,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"root_ca_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,66,73,84,67,66,121,65,73,66,65,84,65,75,66,103,103,113,104,107,106,79,80,81,81,68,65,106,66,111,77,82,111,119,71,65,89,68,86,81,81,68,68,66,70,74,98,110,82,108,98,67,66,84,82,49,103,103,85,109,57,118,10,100,67,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,66,65,99,77,67,49,78,104,98,110,82,104,10,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,81,119,77,122,69,119,77,106,73,49,77,86,111,88,10,68,84,73,48,77,68,81,119,77,106,69,119,77,106,73,49,77,86,113,103,76,122,65,116,77,65,111,71,65,49,85,100,70,65,81,68,65,103,69,66,77,66,56,71,65,49,85,100,73,119,81,89,77,66,97,65,70,67,74,108,68,78,90,97,10,110,84,83,74,56,52,79,48,108,86,75,47,85,66,115,53,74,119,97,115,77,65,111,71,67,67,113,71,83,77,52,57,66,65,77,67,65,48,103,65,77,69,85,67,73,70,70,88,102,85,102,90,43,54,70,88,116,108,56,101,116,102,82,108,10,101,55,120,101,86,115,121,118,99,49,111,68,56,98,108,106,49,119,83,65,87,114,69,89,65,105,69,65,107,53,65,86,55,66,89,50,53,43,114,54,88,48,74,115,72,107,65,109,82,56,90,122,69,121,116,111,85,77,113,57,97,77,55,50,10,117,116,100,111,75,103,77,61,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"pck_crl":[45,45,45,45,45,66,69,71,73,78,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,77,73,73,75,89,84,67,67,67,103,103,67,65,81,69,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,99,68,69,105,77,67,65,71,65,49,85,69,65,119,119,90,83,87,53,48,90,87,119,103,85,48,100,89,73,70,66,68,10,83,121,66,81,98,71,70,48,90,109,57,121,98,83,66,68,81,84,69,97,77,66,103,71,65,49,85,69,67,103,119,82,83,87,53,48,90,87,119,103,81,50,57,121,99,71,57,121,89,88,82,112,98,50,52,120,70,68,65,83,66,103,78,86,10,66,65,99,77,67,49,78,104,98,110,82,104,73,69,78,115,89,88,74,104,77,81,115,119,67,81,89,68,86,81,81,73,68,65,74,68,81,84,69,76,77,65,107,71,65,49,85,69,66,104,77,67,86,86,77,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,88,68,84,73,122,77,68,89,120,77,106,73,120,77,68,65,119,77,49,111,119,103,103,107,48,77,68,77,67,70,71,47,68,84,108,65,106,53,121,105,83,78,68,88,87,71,113,83,52,80,71,71,66,10,90,113,48,49,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,79,43,117,98,112,99,86,47,75,69,55,104,43,77,122,10,54,67,89,101,49,116,109,81,113,83,97,116,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,80,49,103,104,107,104,105,10,110,76,112,122,66,52,116,78,83,83,57,76,80,113,100,66,114,81,106,78,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,10,65,73,114,53,74,66,104,79,72,86,114,57,51,88,80,68,49,106,111,83,57,101,105,49,99,51,53,87,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,78,65,73,86,65,76,69,108,101,88,106,80,113,99,122,100,66,49,109,114,43,77,88,75,99,118,114,106,112,52,113,98,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,100,80,54,109,70,75,108,121,118,103,52,111,81,47,73,70,109,68,87,66,72,116,104,121,43,98,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,43,99,84,118,86,114,79,114,83,78,86,51,52,81,105,54,55,102,83,47,105,65,70,67,70,76,107,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,72,101,66,51,106,53,53,102,120,80,75,72,106,122,68,87,115,72,121,97,77,79,97,122,67,120,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,78,52,107,74,80,108,121,122,113,108,80,56,106,109,84,102,48,50,65,119,108,65,112,51,87,10,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,119,122,71,101,85,81,109,50,82,81,102,84,122,120,69,121,122,103,10,65,48,110,118,85,110,77,90,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,78,56,73,49,49,97,50,97,110,83,88,10,57,68,116,98,116,89,114,97,66,78,80,48,57,54,107,51,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,75,75,57,73,10,87,50,122,50,102,107,67,97,79,100,88,76,87,117,53,70,109,80,101,111,43,110,115,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,10,65,104,85,65,43,52,115,116,114,115,67,83,121,116,113,75,113,98,120,80,56,118,72,67,68,81,78,71,90,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,10,65,119,111,66,65,84,65,48,65,104,85,65,122,85,104,81,114,70,75,57,122,71,109,109,112,118,66,89,121,76,120,88,117,57,67,49,43,71,81,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,109,85,51,84,90,109,57,83,100,102,117,65,88,53,88,100,65,114,49,81,121,121,90,53,50,75,48,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,72,65,104,78,112,65,67,85,105,100,78,107,68,88,117,51,49,82,88,82,105,43,116,68,118,84,66,99,78,77,106,77,119,78,84,69,122,10,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,71,72,121,118,51,80,106,109,48,52,69,113,105,102,89,65,98,49,122,48,107,77,90,116,98,43,65,70,119,48,121,10,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,79,90,75,43,104,82,117,87,107,67,55,47,79,74,87,101,98,67,55,47,71,119,90,82,10,112,76,85,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,82,106,110,120,79,97,85,69,68,57,122,47,71,82,54,75,84,55,10,71,47,67,71,55,87,65,53,99,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,86,110,86,77,47,107,107,110,99,10,72,108,69,49,82,77,51,73,77,76,56,90,116,47,72,122,65,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,65,47,97,10,81,54,65,76,97,79,112,53,116,56,76,101,114,113,119,76,83,89,118,102,115,113,43,81,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,10,78,65,73,86,65,74,49,110,100,84,117,66,53,72,67,81,114,113,100,106,43,43,120,77,82,85,109,56,50,53,107,122,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,10,66,65,77,75,65,81,69,119,77,119,73,85,78,76,43,55,101,104,50,99,86,111,70,72,52,82,105,50,70,80,101,51,98,116,80,118,97,78,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,10,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,104,100,80,74,79,66,116,51,112,43,66,78,69,90,121,101,87,116,90,48,110,47,80,47,113,52,99,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,10,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,107,52,104,56,112,69,69,101,101,112,73,55,48,102,55,83,103,90,115,112,83,102,73,66,116,98,81,88,68,84,73,122,77,68,85,120,10,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,107,109,78,120,105,103,53,77,74,108,118,50,76,56,106,111,51,114,76,52,109,111,55,55,85,86,120,99,78,10,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,75,90,118,71,110,83,85,105,71,90,50,105,99,119,53,65,54,120,85,120,109,10,75,51,69,117,99,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,118,119,84,89,81,118,100,78,115,116,53,104,100,10,69,71,83,66,113,73,68,84,111,66,47,97,66,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,68,118,52,69,115,115,10,77,57,65,50,113,115,108,115,112,110,79,47,72,112,112,72,116,107,49,99,117,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,10,70,81,67,68,50,97,121,78,105,55,85,74,48,99,98,73,67,97,49,120,76,111,81,119,86,90,55,88,56,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,10,67,103,69,66,77,68,77,67,70,72,107,120,47,86,67,49,66,120,119,98,118,56,87,51,116,116,55,89,116,70,117,100,105,52,85,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,10,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,72,54,73,79,75,88,67,57,53,100,86,47,101,52,51,102,103,122,108,73,84,104,56,100,67,67,77,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,101,104,55,76,68,115,121,50,78,73,43,81,82,122,118,78,66,108,55,108,97,56,77,105,116,57,82,99,78,77,106,77,119,78,84,69,122,77,106,69,119,10,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,81,67,70,81,67,97,47,83,55,112,67,107,99,49,85,75,70,110,50,90,97,82,70,68,102,72,85,67,48,102,67,82,99,78,77,106,77,119,10,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,70,69,83,66,115,80,69,88,75,75,69,55,97,87,48,43,113,99,100,119,111,76,70,101,120,89,51,97,10,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,78,65,73,86,65,75,101,70,110,49,101,89,76,118,68,109,102,84,101,56,106,118,76,118,10,87,115,103,49,47,120,113,112,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,65,81,69,119,77,119,73,85,101,117,78,51,83,75,110,53,69,118,84,71,10,79,54,101,114,66,56,87,84,122,104,48,100,69,89,69,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,122,65,104,81,84,105,69,115,122,10,74,112,107,52,119,90,87,113,70,119,47,75,100,100,111,88,100,84,106,102,67,120,99,78,77,106,77,119,78,84,69,122,77,106,69,119,77,68,65,122,87,106,65,77,77,65,111,71,65,49,85,100,70,81,81,68,67,103,69,66,77,68,77,67,10,70,67,119,56,120,118,54,83,101,100,115,86,70,116,88,79,79,102,75,111,109,77,50,108,111,88,88,104,70,119,48,121,77,122,65,49,77,84,77,121,77,84,65,119,77,68,78,97,77,65,119,119,67,103,89,68,86,82,48,86,66,65,77,75,10,65,81,69,119,77,119,73,85,99,88,108,73,97,72,85,74,73,48,118,112,101,101,83,51,51,79,98,122,71,43,57,107,116,111,119,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,10,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,110,88,98,118,76,68,110,66,78,117,104,108,105,50,53,122,108,114,72,88,82,70,111,110,89,120,56,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,10,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,119,43,65,108,47,75,109,86,56,50,57,90,116,73,82,110,107,53,52,43,78,79,89,50,71,109,56,88,68,84,73,122,77,68,85,120,77,122,73,120,10,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,106,70,57,114,77,108,102,97,66,98,70,48,75,101,76,109,71,54,108,108,49,110,77,119,89,71,111,88,68,84,73,122,10,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,84,65,48,65,104,85,65,111,88,120,82,99,105,55,66,52,77,77,110,106,43,105,57,56,70,73,70,110,76,55,69,10,53,107,103,88,68,84,73,122,77,68,85,120,77,122,73,120,77,68,65,119,77,49,111,119,68,68,65,75,66,103,78,86,72,82,85,69,65,119,111,66,65,97,65,118,77,67,48,119,67,103,89,68,86,82,48,85,66,65,77,67,65,81,69,119,10,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,108,87,57,100,122,98,48,98,52,101,108,65,83,99,110,85,57,68,80,79,65,86,99,76,51,108,81,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,68,82,119,65,119,10,82,65,73,103,70,67,99,69,120,104,99,57,109,117,90,67,74,121,98,69,103,97,68,116,103,72,49,90,70,53,115,55,51,57,73,72,84,106,88,108,47,74,90,84,68,82,52,67,73,71,53,87,101,76,99,70,67,103,50,110,90,111,122,80,10,53,78,113,67,48,43,77,101,99,109,89,120,80,78,48,101,117,98,80,98,112,122,104,115,70,50,56,122,10,45,45,45,45,45,69,78,68,32,88,53,48,57,32,67,82,76,45,45,45,45,45,10,0],"tcb_info_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"tcb_info":[123,34,116,99,98,73,110,102,111,34,58,123,34,105,100,34,58,34,83,71,88,34,44,34,118,101,114,115,105,111,110,34,58,51,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,48,56,58,49,49,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,48,56,58,49,49,90,34,44,34,102,109,115,112,99,34,58,34,48,48,54,48,54,97,48,48,48,48,48,48,34,44,34,112,99,101,73,100,34,58,34,48,48,48,48,34,44,34,116,99,98,84,121,112,101,34,58,48,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,49,49,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,67,111,110,102,105,103,117,114,97,116,105,111,110,65,110,100,83,87,72,97,114,100,101,110,105,110,103,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,49,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,55,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,57,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,51,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,50,45,48,56,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,67,111,110,102,105,103,117,114,97,116,105,111,110,78,101,101,100,101,100,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,49,48,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,44,123,34,116,99,98,34,58,123,34,115,103,120,116,99,98,99,111,109,112,111,110,101,110,116,115,34,58,91,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,44,34,116,121,112,101,34,58,34,69,97,114,108,121,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,52,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,83,71,88,32,76,97,116,101,32,77,105,99,114,111,99,111,100,101,32,85,112,100,97,116,101,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,79,83,47,86,77,77,34,44,34,116,121,112,101,34,58,34,84,88,84,32,83,73,78,73,84,34,125,44,123,34,115,118,110,34,58,51,44,34,99,97,116,101,103,111,114,121,34,58,34,66,73,79,83,34,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,50,53,53,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,44,123,34,115,118,110,34,58,48,125,93,44,34,112,99,101,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,49,45,48,52,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,49,48,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,49,51,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,48,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,51,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,55,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,50,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,49,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,56,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,53,56,54,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,53,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,48,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,51,56,34,44,34,73,78,84,69,76,45,83,65,45,48,48,55,54,55,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,53,102,101,101,55,53,54,56,52,55,49,56,98,99,98,57,49,57,49,51,49,50,99,100,51,98,102,52,55,48,57,54,97,52,48,54,56,102,52,53,48,100,50,101,99,57,101,48,53,98,56,99,100,53,97,51,97,55,99,98,54,49,98,50,57,50,54,49,50,97,55,48,56,99,52,99,53,97,51,48,52,56,51,54,99,56,50,99,51,97,55,49,57,49,52,52,55,101,51,98,97,54,57,49,101,53,57,50,56,55,99,99,57,99,56,57,52,51,101,56,50,49,55,51,52,100,52,49,34,125,0],"qe_identity_issuer_chain":[45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,105,122,67,67,65,106,75,103,65,119,73,66,65,103,73,85,102,106,105,67,49,102,116,86,75,85,112,65,83,89,53,70,104,65,80,112,70,74,71,57,57,70,85,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,88,68,84,73,49,77,68,85,121,77,84,69,119,78,84,65,120,77,70,111,119,98,68,69,101,77,66,119,71,10,65,49,85,69,65,119,119,86,83,87,53,48,90,87,119,103,85,48,100,89,73,70,82,68,81,105,66,84,97,87,100,117,97,87,53,110,77,82,111,119,71,65,89,68,86,81,81,75,68,66,70,74,98,110,82,108,98,67,66,68,98,51,74,119,10,98,51,74,104,100,71,108,118,98,106,69,85,77,66,73,71,65,49,85,69,66,119,119,76,85,50,70,117,100,71,69,103,81,50,120,104,99,109,69,120,67,122,65,74,66,103,78,86,66,65,103,77,65,107,78,66,77,81,115,119,67,81,89,68,10,86,81,81,71,69,119,74,86,85,122,66,90,77,66,77,71,66,121,113,71,83,77,52,57,65,103,69,71,67,67,113,71,83,77,52,57,65,119,69,72,65,48,73,65,66,69,78,70,71,56,120,122,121,100,87,82,102,75,57,50,98,109,71,118,10,80,43,109,65,104,57,49,80,69,121,86,55,74,104,54,70,71,74,100,53,110,100,69,57,97,66,72,55,82,51,69,52,65,55,117,98,114,108,104,47,122,78,51,67,52,120,118,112,111,111,117,71,108,105,114,77,98,97,43,87,50,108,106,117,10,121,112,97,106,103,98,85,119,103,98,73,119,72,119,89,68,86,82,48,106,66,66,103,119,70,111,65,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,85,103,89,68,86,82,48,102,10,66,69,115,119,83,84,66,72,111,69,87,103,81,52,90,66,97,72,82,48,99,72,77,54,76,121,57,106,90,88,74,48,97,87,90,112,89,50,70,48,90,88,77,117,100,72,74,49,99,51,82,108,90,72,78,108,99,110,90,112,89,50,86,122,10,76,109,108,117,100,71,86,115,76,109,78,118,98,83,57,74,98,110,82,108,98,70,78,72,87,70,74,118,98,51,82,68,81,83,53,107,90,88,73,119,72,81,89,68,86,82,48,79,66,66,89,69,70,72,52,52,103,116,88,55,86,83,108,75,10,81,69,109,79,82,89,81,68,54,82,83,82,118,102,82,86,77,65,52,71,65,49,85,100,68,119,69,66,47,119,81,69,65,119,73,71,119,68,65,77,66,103,78,86,72,82,77,66,65,102,56,69,65,106,65,65,77,65,111,71,67,67,113,71,10,83,77,52,57,66,65,77,67,65,48,99,65,77,69,81,67,73,66,57,67,56,119,79,65,78,47,73,109,120,68,116,71,65,67,86,50,52,54,75,99,113,106,97,103,90,79,82,48,107,121,99,116,121,66,114,115,71,71,74,86,65,105,65,106,10,102,116,98,114,78,71,115,71,85,56,89,72,50,49,49,100,82,105,89,78,111,80,80,117,49,57,90,112,47,122,101,56,74,109,104,117,106,66,48,111,66,119,61,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,45,45,45,45,45,66,69,71,73,78,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,77,73,73,67,106,122,67,67,65,106,83,103,65,119,73,66,65,103,73,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,85,114,57,81,71,122,107,110,66,113,119,119,67,103,89,73,75,111,90,73,122,106,48,69,65,119,73,119,10,97,68,69,97,77,66,103,71,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,10,99,110,66,118,99,109,70,48,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,10,66,103,78,86,66,65,89,84,65,108,86,84,77,66,52,88,68,84,69,52,77,68,85,121,77,84,69,119,78,68,85,120,77,70,111,88,68,84,81,53,77,84,73,122,77,84,73,122,78,84,107,49,79,86,111,119,97,68,69,97,77,66,103,71,10,65,49,85,69,65,119,119,82,83,87,53,48,90,87,119,103,85,48,100,89,73,70,74,118,98,51,81,103,81,48,69,120,71,106,65,89,66,103,78,86,66,65,111,77,69,85,108,117,100,71,86,115,73,69,78,118,99,110,66,118,99,109,70,48,10,97,87,57,117,77,82,81,119,69,103,89,68,86,81,81,72,68,65,116,84,89,87,53,48,89,83,66,68,98,71,70,121,89,84,69,76,77,65,107,71,65,49,85,69,67,65,119,67,81,48,69,120,67,122,65,74,66,103,78,86,66,65,89,84,10,65,108,86,84,77,70,107,119,69,119,89,72,75,111,90,73,122,106,48,67,65,81,89,73,75,111,90,73,122,106,48,68,65,81,99,68,81,103,65,69,67,54,110,69,119,77,68,73,89,90,79,106,47,105,80,87,115,67,122,97,69,75,105,55,10,49,79,105,79,83,76,82,70,104,87,71,106,98,110,66,86,74,102,86,110,107,89,52,117,51,73,106,107,68,89,89,76,48,77,120,79,52,109,113,115,121,89,106,108,66,97,108,84,86,89,120,70,80,50,115,74,66,75,53,122,108,75,79,66,10,117,122,67,66,117,68,65,102,66,103,78,86,72,83,77,69,71,68,65,87,103,66,81,105,90,81,122,87,87,112,48,48,105,102,79,68,116,74,86,83,118,49,65,98,79,83,99,71,114,68,66,83,66,103,78,86,72,82,56,69,83,122,66,74,10,77,69,101,103,82,97,66,68,104,107,70,111,100,72,82,119,99,122,111,118,76,50,78,108,99,110,82,112,90,109,108,106,89,88,82,108,99,121,53,48,99,110,86,122,100,71,86,107,99,50,86,121,100,109,108,106,90,88,77,117,97,87,53,48,10,90,87,119,117,89,50,57,116,76,48,108,117,100,71,86,115,85,48,100,89,85,109,57,118,100,69,78,66,76,109,82,108,99,106,65,100,66,103,78,86,72,81,52,69,70,103,81,85,73,109,85,77,49,108,113,100,78,73,110,122,103,55,83,86,10,85,114,57,81,71,122,107,110,66,113,119,119,68,103,89,68,86,82,48,80,65,81,72,47,66,65,81,68,65,103,69,71,77,66,73,71,65,49,85,100,69,119,69,66,47,119,81,73,77,65,89,66,65,102,56,67,65,81,69,119,67,103,89,73,10,75,111,90,73,122,106,48,69,65,119,73,68,83,81,65,119,82,103,73,104,65,79,87,47,53,81,107,82,43,83,57,67,105,83,68,99,78,111,111,119,76,117,80,82,76,115,87,71,102,47,89,105,55,71,83,88,57,52,66,103,119,84,119,103,10,65,105,69,65,52,74,48,108,114,72,111,77,115,43,88,111,53,111,47,115,88,54,79,57,81,87,120,72,82,65,118,90,85,71,79,100,82,81,55,99,118,113,82,88,97,113,73,61,10,45,45,45,45,45,69,78,68,32,67,69,82,84,73,70,73,67,65,84,69,45,45,45,45,45,10,0],"qe_identity":[123,34,101,110,99,108,97,118,101,73,100,101,110,116,105,116,121,34,58,123,34,105,100,34,58,34,81,69,34,44,34,118,101,114,115,105,111,110,34,58,50,44,34,105,115,115,117,101,68,97,116,101,34,58,34,50,48,50,51,45,48,53,45,49,53,84,49,52,58,52,56,58,52,48,90,34,44,34,110,101,120,116,85,112,100,97,116,101,34,58,34,50,48,50,51,45,48,54,45,49,52,84,49,52,58,52,56,58,52,48,90,34,44,34,116,99,98,69,118,97,108,117,97,116,105,111,110,68,97,116,97,78,117,109,98,101,114,34,58,49,53,44,34,109,105,115,99,115,101,108,101,99,116,34,58,34,48,48,48,48,48,48,48,48,34,44,34,109,105,115,99,115,101,108,101,99,116,77,97,115,107,34,58,34,70,70,70,70,70,70,70,70,34,44,34,97,116,116,114,105,98,117,116,101,115,34,58,34,49,49,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,97,116,116,114,105,98,117,116,101,115,77,97,115,107,34,58,34,70,66,70,70,70,70,70,70,70,70,70,70,70,70,70,70,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,34,44,34,109,114,115,105,103,110,101,114,34,58,34,56,67,52,70,53,55,55,53,68,55,57,54,53,48,51,69,57,54,49,51,55,70,55,55,67,54,56,65,56,50,57,65,48,48,53,54,65,67,56,68,69,68,55,48,49,52,48,66,48,56,49,66,48,57,52,52,57,48,67,53,55,66,70,70,34,44,34,105,115,118,112,114,111,100,105,100,34,58,49,44,34,116,99,98,76,101,118,101,108,115,34,58,91,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,56,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,51,45,48,50,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,85,112,84,111,68,97,116,101,34,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,54,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,49,45,49,49,45,49,48,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,53,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,50,48,45,49,49,45,49,49,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,52,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,49,49,45,49,51,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,50,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,57,45,48,53,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,44,123,34,116,99,98,34,58,123,34,105,115,118,115,118,110,34,58,49,125,44,34,116,99,98,68,97,116,101,34,58,34,50,48,49,56,45,48,56,45,49,53,84,48,48,58,48,48,58,48,48,90,34,44,34,116,99,98,83,116,97,116,117,115,34,58,34,79,117,116,79,102,68,97,116,101,34,44,34,97,100,118,105,115,111,114,121,73,68,115,34,58,91,34,73,78,84,69,76,45,83,65,45,48,48,50,48,50,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,49,57,34,44,34,73,78,84,69,76,45,83,65,45,48,48,50,57,51,34,44,34,73,78,84,69,76,45,83,65,45,48,48,51,51,52,34,44,34,73,78,84,69,76,45,83,65,45,48,48,52,55,55,34,44,34,73,78,84,69,76,45,83,65,45,48,48,54,49,53,34,93,125,93,125,44,34,115,105,103,110,97,116,117,114,101,34,58,34,57,55,102,102,56,57,53,55,57,55,53,98,52,48,97,97,53,49,97,49,55,55,54,53,100,55,51,52,51,54,51,98,56,99,98,55,53,53,55,101,54,54,53,55,98,48,52,102,54,51,98,54,55,99,48,53,102,50,56,56,54,98,101,49,98,55,99,99,49,52,98,57,99,49,98,56,56,57,101,48,51,98,56,53,56,54,54,101,50,55,55,97,49,48,50,101,98,57,102,98,56,53,48,50,57,98,55,48,48,56,98,52,49,55,53,52,99,100,98,97,48,49,52,97,53,97,56,99,34,125,0]}` + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC) + timeNowFunc = func() time.Time { + return expectedExpirationDate.Add(-1000 * time.Second) + } + mrSigner := "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7e" + mrEnclave := "18946b3547d3ca036f4df7b516857e28fd512d69fed3411dc660537912faabf8" + logicaltest.Test(t, logicaltest.TestCase{ + CredentialBackend: testFactory(t), + Steps: []logicaltest.TestStep{ + testAccStepTEE(t, "tee_app_1", "sgx", mrSigner, "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithName(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepResolveRole(t, connState, "tee_app_1", quoteBase64), + testAccStepTEE(t, "tee_app_1", "sgx", "", mrEnclave, "Ok,SwHardeningNeeded", "foo", false), + testAccStepLoginWithName(t, connState, "tee_app_1", quoteBase64, collateralJson), + testAccStepResolveRole(t, connState, "tee_app_1", quoteBase64), + }, + }) +} + +func testAccStepResolveRole(t *testing.T, connState tls.ConnectionState, teeName string, quote string) logicaltest.TestStep { + return logicaltest.TestStep{ + Operation: logical.ResolveRoleOperation, + Path: "login", + Unauthenticated: true, + ConnState: &connState, + Check: func(resp *logical.Response) error { + if resp.Data["role"] != teeName { + t.Fatalf("Role was not as expected. Expected %s, received %s", teeName, resp.Data["role"]) + } + return nil + }, + Data: map[string]interface{}{ + "quote": quote, + }, + } +} + +func TestTee_RoleResolve_RoleDoesNotExist(t *testing.T) { + connState, err := testConnState("test-fixtures/keys/cert.pem", + "test-fixtures/keys/key.pem", "test-fixtures/keys/cert.pem") + if err != nil { + t.Fatalf("error testing connection state: %v", err) + } + + quoteBase64 := `AwACAAAAAAAJAA4Ak5pyM/ecTKmUCg2zlX8GB2A9AU1uxwxpErEhhnbcltYAAAAACwsQD///AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAADnAAAAAAAAABiUazVH08oDb033tRaFfij9US1p/tNBHcZgU3kS+qv4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApgDfYh4LgIuAZswIHRbeKpA7ZXHfaS/fzJT06RMT9fgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZe/ri1/kInRdrGLXO8tgd7B/R3DMumyPFU8TgL+PkqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxhAAAPvTSIG+2X8S4ne9Zsb8a5wqVabUhgr7r3GlpScrLaGMv8RDLVr9n8O/9CfASa11lqkO1DT+JqFTu+5Mitjp2rm/ptkyoG99YfjwdzdsURZQvQCidBDdhrt1kcr+7HwTFcf1hbifB13klNa6Npsm5sc7SMgVXrVM98+zCj0+jTleCwsQD///AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAAAAAADnAAAAAAAAABkqpQzhwM7wPM+J57Wxaw15ePXCse3Pd02HcC6BVNi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMT1d115ZQPpYTf3fGioKaAFasje1wFAsIGwlEkMV7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLZrH69IGHR4/H2DCpkrZPl4lJ7yWZvpARseCwUJ/wmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGrO+CXpMIu8FYYaLb9gwNsNegCmkZgK72V9wj8LDQmJlvUfpZ+qz4tYm5HucJK8ulPfQMCRoFowZFxLlXF1EiAAAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8FAF4OAAAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRThUQ0NCSmlnQXdJQkFnSVVEMkNQQzRleDNQcnB6UE9YRXBuVTIrNDMzYm93Q2dZSUtvWkl6ajBFQXdJdwpjREVpTUNBR0ExVUVBd3daU1c1MFpXd2dVMGRZSUZCRFN5QlFiR0YwWm05eWJTQkRRVEVhTUJnR0ExVUVDZ3dSClNXNTBaV3dnUTI5eWNHOXlZWFJwYjI0eEZEQVNCZ05WQkFjTUMxTmhiblJoSUVOc1lYSmhNUXN3Q1FZRFZRUUkKREFKRFFURUxNQWtHQTFVRUJoTUNWVk13SGhjTk1qTXdOVEV3TWpBeU5EVTJXaGNOTXpBd05URXdNakF5TkRVMgpXakJ3TVNJd0lBWURWUVFEREJsSmJuUmxiQ0JUUjFnZ1VFTkxJRU5sY25ScFptbGpZWFJsTVJvd0dBWURWUVFLCkRCRkpiblJsYkNCRGIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlYKQkFnTUFrTkJNUXN3Q1FZRFZRUUdFd0pWVXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkR1ZQpDOFl2L1JnZ2V5cnV5cWpmUlhydk1ZRjBoUnhRd1dueW9oVXQvd2VjeUxlL2YyREdZSGk1RlNGLzZnUmlTOC9WCjZiYld6bXEycTBsZm9Mei9hMEdqZ2dNT01JSURDakFmQmdOVkhTTUVHREFXZ0JTVmIxM052UnZoNlVCSnlkVDAKTTg0QlZ3dmVWREJyQmdOVkhSOEVaREJpTUdDZ1hxQmNobHBvZEhSd2N6b3ZMMkZ3YVM1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwzTm5lQzlqWlhKMGFXWnBZMkYwYVc5dUwzWXpMM0JqYTJOeWJEOWpZVDF3CmJHRjBabTl5YlNabGJtTnZaR2x1Wnoxa1pYSXdIUVlEVlIwT0JCWUVGSi95dmhxV0lBd0prOTJIbXpjSWtreWcKMUFDQU1BNEdBMVVkRHdFQi93UUVBd0lHd0RBTUJnTlZIUk1CQWY4RUFqQUFNSUlDT3dZSktvWklodmhOQVEwQgpCSUlDTERDQ0FpZ3dIZ1lLS29aSWh2aE5BUTBCQVFRUXFmNzBJOGRnYksweGVtaEY0TExIM3pDQ0FXVUdDaXFHClNJYjRUUUVOQVFJd2dnRlZNQkFHQ3lxR1NJYjRUUUVOQVFJQkFnRUxNQkFHQ3lxR1NJYjRUUUVOQVFJQ0FnRUwKTUJBR0N5cUdTSWI0VFFFTkFRSURBZ0VETUJBR0N5cUdTSWI0VFFFTkFRSUVBZ0VETUJFR0N5cUdTSWI0VFFFTgpBUUlGQWdJQS96QVJCZ3NxaGtpRytFMEJEUUVDQmdJQ0FQOHdFQVlMS29aSWh2aE5BUTBCQWdjQ0FRRXdFQVlMCktvWklodmhOQVEwQkFnZ0NBUUF3RUFZTEtvWklodmhOQVEwQkFna0NBUUF3RUFZTEtvWklodmhOQVEwQkFnb0MKQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3NDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZ3dDQVFBd0VBWUxLb1pJaHZoTgpBUTBCQWcwQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWc0Q0FRQXdFQVlMS29aSWh2aE5BUTBCQWc4Q0FRQXdFQVlMCktvWklodmhOQVEwQkFoQUNBUUF3RUFZTEtvWklodmhOQVEwQkFoRUNBUTB3SHdZTEtvWklodmhOQVEwQkFoSUUKRUFzTEF3UC8vd0VBQUFBQUFBQUFBQUF3RUFZS0tvWklodmhOQVEwQkF3UUNBQUF3RkFZS0tvWklodmhOQVEwQgpCQVFHQUdCcUFBQUFNQThHQ2lxR1NJYjRUUUVOQVFVS0FRRXdIZ1lLS29aSWh2aE5BUTBCQmdRUUtEbyt6dWdoCjhaY0xBME9hM3BSa2REQkVCZ29xaGtpRytFMEJEUUVITURZd0VBWUxLb1pJaHZoTkFRMEJCd0VCQWY4d0VBWUwKS29aSWh2aE5BUTBCQndJQkFRQXdFQVlMS29aSWh2aE5BUTBCQndNQkFRQXdDZ1lJS29aSXpqMEVBd0lEUndBdwpSQUlnRHBmZFptVE5IYnVRaFE0c0ZMSnZ5czIzY2ZxdWR1ODBZcUlEVm5ud2NPRUNJRmhUMFF2R2xqS1FSM2NvClBqOGhoSFQ5anVWYXFkM1RydE1YRDFQZEhZWHYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgA=` + var expectedExpirationDate = time.Date(2023, 6, 12, 21, 0, 3, 0, time.UTC) + timeNowFunc = func() time.Time { + return expectedExpirationDate.Add(-1000 * time.Second) + } + + logicaltest.Test(t, logicaltest.TestCase{ + CredentialBackend: testFactory(t), + Steps: []logicaltest.TestStep{ + testAccStepTEE(t, "tee_app_1", "sgx", "298037d88782e022e019b3020745b78aa40ed95c77da4bf7f3253d3a44c4fd7f", "", "Ok,SwHardeningNeeded", "foo", false), + testAccStepResolveRoleExpectRoleResolutionToFail(t, connState, quoteBase64), + }, + }) +} + +func testAccStepResolveRoleExpectRoleResolutionToFail(t *testing.T, connState tls.ConnectionState, quote string) logicaltest.TestStep { + return logicaltest.TestStep{ + Operation: logical.ResolveRoleOperation, + Path: "login", + Unauthenticated: true, + ConnState: &connState, + ErrorOk: true, + Check: func(resp *logical.Response) error { + if resp == nil && !resp.IsError() { + t.Fatalf("Response was not an error: resp:%#v", resp) + } + + errString, ok := resp.Data["error"].(string) + if !ok { + t.Fatal("Error not part of response.") + } + + if !strings.Contains(errString, "no TEE was matched by this request") { + t.Fatalf("Error was not due no matching TEE. Error: %s", errString) + } + return nil + }, + Data: map[string]interface{}{ + "quote": quote, + }, + } +} diff --git a/tee/path_tees.go b/tee/path_tees.go new file mode 100644 index 0000000..91774d3 --- /dev/null +++ b/tee/path_tees.go @@ -0,0 +1,331 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. +// Copyright (c) Matter Labs + +package tee + +import "C" +import ( + "context" + "encoding/hex" + "fmt" + "strings" + "time" + + "github.com/hashicorp/vault/sdk/framework" + "github.com/hashicorp/vault/sdk/helper/tokenutil" + "github.com/hashicorp/vault/sdk/logical" + + "github.com/matter-labs/vault-auth-tee/ratee" +) + +func pathListTees(b *backend) *framework.Path { + return &framework.Path{ + Pattern: "tees/?", + + DisplayAttrs: &framework.DisplayAttributes{ + OperationPrefix: operationPrefixTee, + OperationSuffix: "tees", + Navigation: true, + ItemType: "Tee", + }, + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.ListOperation: b.pathTeeList, + }, + + HelpSynopsis: pathTeeHelpSyn, + HelpDescription: pathTeeHelpDesc, + } +} + +func pathTees(b *backend) *framework.Path { + p := &framework.Path{ + Pattern: "tees/" + framework.GenericNameRegex("name"), + + DisplayAttrs: &framework.DisplayAttributes{ + OperationPrefix: operationPrefixTee, + OperationSuffix: "tee", + Action: "Create", + ItemType: "Tee", + }, + + Fields: map[string]*framework.FieldSchema{ + "name": { + Type: framework.TypeString, + Description: "The name of the Tee, which passes remote attestation verification", + }, + + "types": { + Type: framework.TypeCommaStringSlice, + Description: "The types of the TEE.", + }, + + "sgx_mrsigner": { + Type: framework.TypeString, + Description: `The SGX mrsigner hex value to check the attestation report against`, + }, + + "sgx_mrenclave": { + Type: framework.TypeString, + Description: `The SGX mrenclave hex value to check the attestation report against`, + }, + + "sgx_isv_prodid": { + Type: framework.TypeInt, + Description: `The SGX isv_prodid value to check the attestation report against`, + }, + + "sgx_min_isv_svn": { + Type: framework.TypeInt, + Description: `The SGX minimum isv_svn value to check the attestation report against`, + }, + + "sgx_allowed_tcb_levels": { + Type: framework.TypeCommaStringSlice, + Description: `A comma seperated list of allowed SGX TCB states. +Allowed values are: ConfigNeeded, OutOfDate, OutOfDateConfigNeeded, SwHardeningNeeded, ConfigAndSwHardeningNeeded`, + }, + + "display_name": { + Type: framework.TypeString, + Description: `The display name to use for clients using this certificate.`, + }, + }, + + Callbacks: map[logical.Operation]framework.OperationFunc{ + logical.DeleteOperation: b.pathTeeDelete, + logical.ReadOperation: b.pathTeeRead, + logical.UpdateOperation: b.pathTeeWrite, + }, + + HelpSynopsis: pathTeeHelpSyn, + HelpDescription: pathTeeHelpDesc, + } + + tokenutil.AddTokenFields(p.Fields) + return p +} + +func (b *backend) Tee(ctx context.Context, s logical.Storage, n string) (*TeeEntry, error) { + entry, err := s.Get(ctx, "tee/"+strings.ToLower(n)) + if err != nil { + return nil, err + } + if entry == nil { + return nil, nil + } + + var result TeeEntry + if err := entry.DecodeJSON(&result); err != nil { + return nil, err + } + + return &result, nil +} + +func (b *backend) pathTeeDelete(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + err := req.Storage.Delete(ctx, "tee/"+strings.ToLower(d.Get("name").(string))) + if err != nil { + return nil, err + } + return nil, nil +} + +func (b *backend) pathTeeList(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + tees, err := req.Storage.List(ctx, "tee/") + if err != nil { + return nil, err + } + return logical.ListResponse(tees), nil +} + +func (b *backend) pathTeeRead(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + tee, err := b.Tee(ctx, req.Storage, strings.ToLower(d.Get("name").(string))) + if err != nil { + return nil, err + } + if tee == nil { + return nil, nil + } + + data := map[string]interface{}{ + "display_name": tee.DisplayName, + "types": tee.Types, + "sgx_mrsigner": tee.SgxMrsigner, + "sgx_mrenclave": tee.SgxMrenclave, + "sgx_isv_prodid": tee.SgxIsvProdid, + "sgx_min_isv_svn": tee.SgxMinIsvSvn, + "sgx_allowed_tcb_levels": tee.SgxAllowedTcbLevels, + } + tee.PopulateTokenData(data) + + return &logical.Response{ + Data: data, + }, nil +} + +func (b *backend) pathTeeWrite(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) { + name := strings.ToLower(d.Get("name").(string)) + + tee, err := b.Tee(ctx, req.Storage, name) + if err != nil { + return nil, err + } + + if tee == nil { + tee = &TeeEntry{ + Name: name, + } + } + + // Get non tokenutil fields + if displayNameRaw, ok := d.GetOk("display_name"); ok { + tee.DisplayName = displayNameRaw.(string) + } + + if teeTypes, ok := d.GetOk("types"); ok { + tee.Types = make(map[string]bool) + handled := make(map[string]bool) + for _, t := range teeTypes.([]string) { + // only SGX supported for now + if _, ok = handled[t]; ok { + return logical.ErrorResponse(fmt.Sprintf("duplicate TEE type `%s`", t)), nil + } + if t == "sgx" { + tee.Types[t] = true + handled[t] = true + response, err := handleSGXConfig(d, tee) + if response != nil || err != nil { + return response, err + } + } else { + return logical.ErrorResponse(fmt.Sprintf("invalid TEE type `%s`", t)), nil + } + } + } else { + return logical.ErrorResponse("missing TEE types"), nil + } + + // Get tokenutil fields + if err := tee.ParseTokenFields(req, d); err != nil { + return logical.ErrorResponse(err.Error()), logical.ErrInvalidRequest + } + + var resp logical.Response + + systemDefaultTTL := b.System().DefaultLeaseTTL() + if tee.TokenTTL > systemDefaultTTL { + resp.AddWarning(fmt.Sprintf("Given ttl of %d seconds is greater than current mount/system default of %d seconds", tee.TokenTTL/time.Second, systemDefaultTTL/time.Second)) + } + systemMaxTTL := b.System().MaxLeaseTTL() + if tee.TokenMaxTTL > systemMaxTTL { + resp.AddWarning(fmt.Sprintf("Given max_ttl of %d seconds is greater than current mount/system default of %d seconds", tee.TokenMaxTTL/time.Second, systemMaxTTL/time.Second)) + } + if tee.TokenMaxTTL != 0 && tee.TokenTTL > tee.TokenMaxTTL { + return logical.ErrorResponse("ttl should be shorter than max_ttl"), nil + } + if tee.TokenPeriod > systemMaxTTL { + resp.AddWarning(fmt.Sprintf("Given period of %d seconds is greater than the backend's maximum TTL of %d seconds", tee.TokenPeriod/time.Second, systemMaxTTL/time.Second)) + } + + // Default the display name to the certificate name if not given + if tee.DisplayName == "" { + tee.DisplayName = name + } + + // Store it + entry, err := logical.StorageEntryJSON("tee/"+name, tee) + if err != nil { + return nil, err + } + if err := req.Storage.Put(ctx, entry); err != nil { + return nil, err + } + + if len(resp.Warnings) == 0 { + return nil, nil + } + + return &resp, nil +} + +func handleSGXConfig(d *framework.FieldData, tee *TeeEntry) (*logical.Response, error) { + if sgxMrsignerRaw, ok := d.GetOk("sgx_mrsigner"); ok && sgxMrsignerRaw.(string) != "" { + tee.SgxMrsigner = strings.ToLower(sgxMrsignerRaw.(string)) + b, err := hex.DecodeString(tee.SgxMrsigner) + if err != nil || len(b) != 32 { + return logical.ErrorResponse("`sgx_mrsigner` must be 32 byte hex encoded"), nil + } + } + + if sgxMrenclaveRaw, ok := d.GetOk("sgx_mrenclave"); ok && sgxMrenclaveRaw.(string) != "" { + tee.SgxMrenclave = strings.ToLower(sgxMrenclaveRaw.(string)) + b, err := hex.DecodeString(tee.SgxMrenclave) + if err != nil || len(b) != 32 { + return logical.ErrorResponse("`sgx_mrenclave` must be 32 byte hex encoded"), nil + } + } + + if tee.SgxMrsigner == "" && tee.SgxMrenclave == "" { + return logical.ErrorResponse("either `sgx_mrsigner` or `sgx_mrenclave` must be set"), nil + } + + if sgxIsvProdidRaw, ok := d.GetOk("sgx_isv_prodid"); ok { + tee.SgxIsvProdid = sgxIsvProdidRaw.(int) + } + + if sgxMinIsvSvnRaw, ok := d.GetOk("sgx_min_isv_svn"); ok { + tee.SgxMinIsvSvn = sgxMinIsvSvnRaw.(int) + } + + if sgxAllowedTcbLevelsRaw, ok := d.GetOk("sgx_allowed_tcb_levels"); ok { + tee.SgxAllowedTcbLevels = make(map[ratee.SgxQlQvResult]bool) + for _, v := range sgxAllowedTcbLevelsRaw.([]string) { + var state ratee.SgxQlQvResult + switch v { + case "Ok": + state = ratee.SgxQlQvResultOk + case "ConfigNeeded": + state = ratee.SgxQlQvResultConfigNeeded + case "OutOfDate": + state = ratee.SgxQlQvResultOutOfDate + case "OutOfDateConfigNeeded": + state = ratee.SgxQlQvResultOutOfDateConfigNeeded + case "SwHardeningNeeded": + state = ratee.SgxQlQvResultSwHardeningNeeded + case "ConfigAndSwHardeningNeeded": + state = ratee.SgxQlQvResultConfigAndSwHardeningNeeded + default: + return logical.ErrorResponse("invalid sgx_allowed_tcb_levels value"), logical.ErrInvalidRequest + } + tee.SgxAllowedTcbLevels[state] = true + } + } + return nil, nil +} + +type TeeEntry struct { + tokenutil.TokenParams + + Name string + DisplayName string + Types map[string]bool + SgxMrsigner string + SgxMrenclave string + SgxIsvProdid int + SgxMinIsvSvn int + SgxAllowedTcbLevels map[ratee.SgxQlQvResult]bool +} + +const pathTeeHelpSyn = ` +Manage TEE remote attestation parameters used for authentication.` + +const pathTeeHelpDesc = ` +This endpoint allows you to create, read, update, and delete TEEs +that are allowed to authenticate. + +Deleting a TEE will not revoke auth for prior authenticated connections. +To do this, do a revoke on "login". If you don't need to revoke login immediately, +then the next renew will cause the lease to expire. +` diff --git a/tee/test-fixtures/keys/cert.pem b/tee/test-fixtures/keys/cert.pem new file mode 100644 index 0000000..942d266 --- /dev/null +++ b/tee/test-fixtures/keys/cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIUf+jhKTFBnqSs34II0WS1L4QsbbAwDQYJKoZIhvcNAQEL +BQAwFjEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYwMjI5MDIyNzQxWhcNMjUw +MTA1MTAyODExWjAbMRkwFwYDVQQDExBjZXJ0LmV4YW1wbGUuY29tMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsZx0Svr82YJpFpIy4fJNW5fKA6B8mhxS +TRAVnygAftetT8puHflY0ss7Y6X2OXjsU0PRn+1PswtivhKi+eLtgWkUF9cFYFGn +SgMld6ZWRhNheZhA6ZfQmeM/BF2pa5HK2SDF36ljgjL9T+nWrru2Uv0BCoHzLAmi +YYMiIWplidMmMO5NTRG3k+3AN0TkfakB6JVzjLGhTcXdOcVEMXkeQVqJMAuGouU5 +donyqtnaHuIJGuUdy54YDnX86txhOQhAv6r7dHXzZxS4pmLvw8UI1rsSf/GLcUVG +B+5+AAGF5iuHC3N2DTl4xz3FcN4Cb4w9pbaQ7+mCzz+anqiJfyr2nwIDAQABo4H1 +MIHyMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUm++e +HpyM3p708bgZJuRYEdX1o+UwHwYDVR0jBBgwFoAUncSzT/6HMexyuiU9/7EgHu+o +k5swOwYIKwYBBQUHAQEELzAtMCsGCCsGAQUFBzAChh9odHRwOi8vMTI3LjAuMC4x +OjgyMDAvdjEvcGtpL2NhMCEGA1UdEQQaMBiCEGNlcnQuZXhhbXBsZS5jb22HBH8A +AAEwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDovLzEyNy4wLjAuMTo4MjAwL3YxL3Br +aS9jcmwwDQYJKoZIhvcNAQELBQADggEBABsuvmPSNjjKTVN6itWzdQy+SgMIrwfs +X1Yb9Lefkkwmp9ovKFNQxa4DucuCuzXcQrbKwWTfHGgR8ct4rf30xCRoA7dbQWq4 +aYqNKFWrRaBRAaaYZ/O1ApRTOrXqRx9Eqr0H1BXLsoAq+mWassL8sf6siae+CpwA +KqBko5G0dNXq5T4i2LQbmoQSVetIrCJEeMrU+idkuqfV2h1BQKgSEhFDABjFdTCN +QDAHsEHsi2M4/jRW9fqEuhHSDfl2n7tkFUI8wTHUUCl7gXwweJ4qtaSXIwKXYzNj +xqKHA8Purc1Yfybz4iE1JCROi9fInKlzr5xABq8nb9Qc/J9DIQM+Xmk= +-----END CERTIFICATE----- diff --git a/tee/test-fixtures/keys/key.pem b/tee/test-fixtures/keys/key.pem new file mode 100644 index 0000000..add9820 --- /dev/null +++ b/tee/test-fixtures/keys/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAsZx0Svr82YJpFpIy4fJNW5fKA6B8mhxSTRAVnygAftetT8pu +HflY0ss7Y6X2OXjsU0PRn+1PswtivhKi+eLtgWkUF9cFYFGnSgMld6ZWRhNheZhA +6ZfQmeM/BF2pa5HK2SDF36ljgjL9T+nWrru2Uv0BCoHzLAmiYYMiIWplidMmMO5N +TRG3k+3AN0TkfakB6JVzjLGhTcXdOcVEMXkeQVqJMAuGouU5donyqtnaHuIJGuUd +y54YDnX86txhOQhAv6r7dHXzZxS4pmLvw8UI1rsSf/GLcUVGB+5+AAGF5iuHC3N2 +DTl4xz3FcN4Cb4w9pbaQ7+mCzz+anqiJfyr2nwIDAQABAoIBAHR7fFV0eAGaopsX +9OD0TUGlsephBXb43g0GYHfJ/1Ew18w9oaxszJEqkl+PB4W3xZ3yG3e8ZomxDOhF +RreF2WgG5xOfhDogMwu6NodbArfgnAvoC6JnW3qha8HMP4F500RFVyCRcd6A3Frd +rFtaZn/UyCsBAN8/zkwPeYHayo7xX6d9kzgRl9HluEX5PXI5+3uiBDUiM085gkLI +5Cmadh9fMdjfhDXI4x2JYmILpp/9Nlc/krB15s5n1MPNtn3yL0TI0tWp0WlwDCV7 +oUm1SfIM0F1fXGFyFDcqwoIr6JCQgXk6XtTg31YhH1xgUIclUVdtHqmAwAbLdIhQ +GAiHn2kCgYEAwD4pZ8HfpiOG/EHNoWsMATc/5yC7O8F9WbvcHZQIymLY4v/7HKZb +VyOR6UQ5/O2cztSGIuKSF6+OK1C34lOyCuTSOTFrjlgEYtLIXjdGLfFdtOO8GRQR +akVXdwuzNAjTBaH5eXbG+NKcjmCvZL48dQVlfDTVulzFGbcsVTHIMQUCgYEA7IQI +FVsKnY3KqpyGqXq92LMcsT3XgW6X1BIIV+YhJ5AFUFkFrjrbXs94/8XyLfi0xBQy +efK+8g5sMs7koF8LyZEcAXWZJQduaKB71hoLlRaU4VQkL/dl2B6VFmAII/CsRCYh +r9RmDN2PF/mp98Ih9dpC1VqcCDRGoTYsd7jLalMCgYAMgH5k1wDaZxkSMp1S0AlZ +0uP+/evvOOgT+9mWutfPgZolOQx1koQCKLgGeX9j6Xf3I28NubpSfAI84uTyfQrp +FnRtb79U5Hh0jMynA+U2e6niZ6UF5H41cQj9Hu+qhKBkj2IP+h96cwfnYnZFkPGR +kqZE65KyqfHPeFATwkcImQKBgCdrfhlpGiTWXCABhKQ8s+WpPLAB2ahV8XJEKyXT +UlVQuMIChGLcpnFv7P/cUxf8asx/fUY8Aj0/0CLLvulHziQjTmKj4gl86pb/oIQ3 +xRRtNhU0O+/OsSfLORgIm3K6C0w0esregL/GMbJSR1TnA1gBr7/1oSnw5JC8Ab9W +injHAoGAJT1MGAiQrhlt9GCGe6Ajw4omdbY0wS9NXefnFhf7EwL0es52ezZ28zpU +2LXqSFbtann5CHgpSLxiMYPDIf+er4xgg9Bz34tz1if1rDfP2Qrxdrpr4jDnrGT3 +gYC2qCpvVD9RRUMKFfnJTfl5gMQdBW/LINkHtJ82snAeLl3gjQ4= +-----END RSA PRIVATE KEY----- diff --git a/tee/test_responder.go b/tee/test_responder.go new file mode 100644 index 0000000..d14e2a3 --- /dev/null +++ b/tee/test_responder.go @@ -0,0 +1,302 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) HashiCorp, Inc. + +// Package ocsp implements an OCSP responder based on a generic storage backend. +// It provides a couple of sample implementations. +// Because OCSP responders handle high query volumes, we have to be careful +// about how much logging we do. Error-level logs are reserved for problems +// internal to the server, that can be fixed by an administrator. Any type of +// incorrect input from a user should be logged and Info or below. For things +// that are logged on every request, Debug is the appropriate level. +// +// From https://github.com/cloudflare/cfssl/blob/master/ocsp/responder.go + +package tee + +import ( + "crypto" + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "time" + + "golang.org/x/crypto/ocsp" +) + +var ( + malformedRequestErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x01} + internalErrorErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x02} + unauthorizedErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x06} + + // ErrNotFound indicates the request OCSP response was not found. It is used to + // indicate that the responder should reply with unauthorizedErrorResponse. + ErrNotFound = errors.New("Request OCSP Response not found") +) + +// Source represents the logical source of OCSP responses, i.e., +// the logic that actually chooses a response based on a request. In +// order to create an actual responder, wrap one of these in a Responder +// object and pass it to http.Handle. By default the Responder will set +// the headers Cache-Control to "max-age=(response.NextUpdate-now), public, no-transform, must-revalidate", +// Last-Modified to response.ThisUpdate, Expires to response.NextUpdate, +// ETag to the SHA256 hash of the response, and Content-Type to +// application/ocsp-response. If you want to override these headers, +// or set extra headers, your source should return a http.Header +// with the headers you wish to set. If you don'log want to set any +// extra headers you may return nil instead. +type Source interface { + Response(*ocsp.Request) ([]byte, http.Header, error) +} + +// An InMemorySource is a map from serialNumber -> der(response) +type InMemorySource map[string][]byte + +// Response looks up an OCSP response to provide for a given request. +// InMemorySource looks up a response purely based on serial number, +// without regard to what issuer the request is asking for. +func (src InMemorySource) Response(request *ocsp.Request) ([]byte, http.Header, error) { + response, present := src[request.SerialNumber.String()] + if !present { + return nil, nil, ErrNotFound + } + return response, nil, nil +} + +// Stats is a basic interface that allows users to record information +// about returned responses +type Stats interface { + ResponseStatus(ocsp.ResponseStatus) +} + +type logger interface { + Log(args ...any) +} + +// A Responder object provides the HTTP logic to expose a +// Source of OCSP responses. +type Responder struct { + log logger + Source Source + stats Stats +} + +// NewResponder instantiates a Responder with the give Source. +func NewResponder(t logger, source Source, stats Stats) *Responder { + return &Responder{ + Source: source, + stats: stats, + log: t, + } +} + +func overrideHeaders(response http.ResponseWriter, headers http.Header) { + for k, v := range headers { + if len(v) == 1 { + response.Header().Set(k, v[0]) + } else if len(v) > 1 { + response.Header().Del(k) + for _, e := range v { + response.Header().Add(k, e) + } + } + } +} + +// hashToString contains mappings for the only hash functions +// x/crypto/ocsp supports +var hashToString = map[crypto.Hash]string{ + crypto.SHA1: "SHA1", + crypto.SHA256: "SHA256", + crypto.SHA384: "SHA384", + crypto.SHA512: "SHA512", +} + +// A Responder can process both GET and POST requests. The mapping +// from an OCSP request to an OCSP response is done by the Source; +// the Responder simply decodes the request, and passes back whatever +// response is provided by the source. +// Note: The caller must use http.StripPrefix to strip any path components +// (including '/') on GET requests. +// Do not use this responder in conjunction with http.NewServeMux, because the +// default handler will try to canonicalize path components by changing any +// strings of repeated '/' into a single '/', which will break the base64 +// encoding. +func (rs *Responder) ServeHTTP(response http.ResponseWriter, request *http.Request) { + // By default we set a 'max-age=0, no-cache' Cache-Control header, this + // is only returned to the client if a valid authorized OCSP response + // is not found or an error is returned. If a response if found the header + // will be altered to contain the proper max-age and modifiers. + response.Header().Add("Cache-Control", "max-age=0, no-cache") + // Read response from request + var requestBody []byte + var err error + switch request.Method { + case "GET": + base64Request, err := url.QueryUnescape(request.URL.Path) + if err != nil { + rs.log.Log("Error decoding URL:", request.URL.Path) + response.WriteHeader(http.StatusBadRequest) + return + } + // url.QueryUnescape not only unescapes %2B escaping, but it additionally + // turns the resulting '+' into a space, which makes base64 decoding fail. + // So we go back afterwards and turn ' ' back into '+'. This means we + // accept some malformed input that includes ' ' or %20, but that's fine. + base64RequestBytes := []byte(base64Request) + for i := range base64RequestBytes { + if base64RequestBytes[i] == ' ' { + base64RequestBytes[i] = '+' + } + } + // In certain situations a UA may construct a request that has a double + // slash between the host name and the base64 request body due to naively + // constructing the request URL. In that case strip the leading slash + // so that we can still decode the request. + if len(base64RequestBytes) > 0 && base64RequestBytes[0] == '/' { + base64RequestBytes = base64RequestBytes[1:] + } + requestBody, err = base64.StdEncoding.DecodeString(string(base64RequestBytes)) + if err != nil { + rs.log.Log("Error decoding base64 from URL", string(base64RequestBytes)) + response.WriteHeader(http.StatusBadRequest) + return + } + case "POST": + requestBody, err = ioutil.ReadAll(request.Body) + if err != nil { + rs.log.Log("Problem reading body of POST", err) + response.WriteHeader(http.StatusBadRequest) + return + } + default: + response.WriteHeader(http.StatusMethodNotAllowed) + return + } + b64Body := base64.StdEncoding.EncodeToString(requestBody) + rs.log.Log("Received OCSP request", b64Body) + + // All responses after this point will be OCSP. + // We could check for the content type of the request, but that + // seems unnecessariliy restrictive. + response.Header().Add("Content-Type", "application/ocsp-response") + + // Parse response as an OCSP request + // XXX: This fails if the request contains the nonce extension. + // We don'log intend to support nonces anyway, but maybe we + // should return unauthorizedRequest instead of malformed. + ocspRequest, err := ocsp.ParseRequest(requestBody) + if err != nil { + rs.log.Log("Error decoding request body", b64Body) + response.WriteHeader(http.StatusBadRequest) + response.Write(malformedRequestErrorResponse) + if rs.stats != nil { + rs.stats.ResponseStatus(ocsp.Malformed) + } + return + } + + // Look up OCSP response from source + ocspResponse, headers, err := rs.Source.Response(ocspRequest) + if err != nil { + if err == ErrNotFound { + rs.log.Log("No response found for request: serial %x, request body %s", + ocspRequest.SerialNumber, b64Body) + response.Write(unauthorizedErrorResponse) + if rs.stats != nil { + rs.stats.ResponseStatus(ocsp.Unauthorized) + } + return + } + rs.log.Log("Error retrieving response for request: serial %x, request body %s, error", + ocspRequest.SerialNumber, b64Body, err) + response.WriteHeader(http.StatusInternalServerError) + response.Write(internalErrorErrorResponse) + if rs.stats != nil { + rs.stats.ResponseStatus(ocsp.InternalError) + } + return + } + + parsedResponse, err := ocsp.ParseResponse(ocspResponse, nil) + if err != nil { + rs.log.Log("Error parsing response for serial %x", + ocspRequest.SerialNumber, err) + response.Write(internalErrorErrorResponse) + if rs.stats != nil { + rs.stats.ResponseStatus(ocsp.InternalError) + } + return + } + + // Write OCSP response to response + response.Header().Add("Last-Modified", parsedResponse.ThisUpdate.Format(time.RFC1123)) + response.Header().Add("Expires", parsedResponse.NextUpdate.Format(time.RFC1123)) + now := time.Now() + maxAge := 0 + if now.Before(parsedResponse.NextUpdate) { + maxAge = int(parsedResponse.NextUpdate.Sub(now) / time.Second) + } else { + // TODO(#530): we want max-age=0 but this is technically an authorized OCSP response + // (despite being stale) and 5019 forbids attaching no-cache + maxAge = 0 + } + response.Header().Set( + "Cache-Control", + fmt.Sprintf( + "max-age=%d, public, no-transform, must-revalidate", + maxAge, + ), + ) + responseHash := sha256.Sum256(ocspResponse) + response.Header().Add("ETag", fmt.Sprintf("\"%X\"", responseHash)) + + if headers != nil { + overrideHeaders(response, headers) + } + + // RFC 7232 says that a 304 response must contain the above + // headers if they would also be sent for a 200 for the same + // request, so we have to wait until here to do this + if etag := request.Header.Get("If-None-Match"); etag != "" { + if etag == fmt.Sprintf("\"%X\"", responseHash) { + response.WriteHeader(http.StatusNotModified) + return + } + } + response.WriteHeader(http.StatusOK) + response.Write(ocspResponse) + if rs.stats != nil { + rs.stats.ResponseStatus(ocsp.Success) + } +} + +/* +Copyright (c) 2014 CloudFlare Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000..a909f3d --- /dev/null +++ b/version/version.go @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright (c) Matter Labs + +package version + +const Version = "0.1.0+dev" +const Name = "vault-auth-tee"