From e6d0708a7a56dd3efd1d24d9f99b2ab44bad01e7 Mon Sep 17 00:00:00 2001 From: mgaur10 <46466824+mgaur10@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:58:25 -0500 Subject: [PATCH] Add files via upload --- v0.1/CHANGELOG.md | 37 + v0.1/CODEOWNERS | 12 + v0.1/CONTRIBUTING.md | 131 +++ v0.1/LICENSE | 202 ++++ v0.1/Makefile | 86 ++ v0.1/README.md | 115 ++ v0.1/SECURITY.md | 4 + v0.1/assets/icon.png | Bin 0 -> 3738 bytes v0.1/build/int.cloudbuild.yaml | 44 + v0.1/build/lint.cloudbuild.yaml | 24 + v0.1/examples/cloud_autokms_example/README.md | 90 ++ .../architecture-diagram.png | Bin 0 -> 64521 bytes v0.1/examples/cloud_autokms_example/bq.tf | 85 ++ .../examples/cloud_autokms_example/compute.tf | 68 ++ v0.1/examples/cloud_autokms_example/main.tf | 44 + .../examples/cloud_autokms_example/outputs.tf | 32 + .../examples/cloud_autokms_example/storage.tf | 39 + .../cloud_autokms_example/variables.tf | 21 + .../cloud_autokms_example/versions.tf | 40 + v0.1/main.tf | 170 +++ v0.1/outputs.tf | 40 + v0.1/test/integration/discover_test.go | 25 + v0.1/test/integration/go.mod | 82 ++ v0.1/test/integration/go.sum | 1018 +++++++++++++++++ v0.1/test/setup/README.md | 97 ++ v0.1/test/setup/iam.tf | 44 + v0.1/test/setup/main.tf | 35 + v0.1/test/setup/outputs.tf | 24 + v0.1/test/setup/variables.tf | 26 + v0.1/test/setup/versions.tf | 29 + v0.1/variables.tf | 125 ++ v0.1/versions.tf | 42 + v0.2/terraform-google-autokey/CHANGELOG.md | 37 + v0.2/terraform-google-autokey/CODEOWNERS | 12 + v0.2/terraform-google-autokey/CONTRIBUTING.md | 131 +++ v0.2/terraform-google-autokey/LICENSE | 202 ++++ v0.2/terraform-google-autokey/Makefile | 86 ++ v0.2/terraform-google-autokey/README.md | 112 ++ v0.2/terraform-google-autokey/SECURITY.md | 4 + v0.2/terraform-google-autokey/assets/icon.png | Bin 0 -> 3738 bytes .../build/int.cloudbuild.yaml | 44 + .../build/lint.cloudbuild.yaml | 24 + .../examples/cloud_autokms_example/README.md | 90 ++ .../architecture-diagram.png | Bin 0 -> 64521 bytes .../examples/cloud_autokms_example/bq.tf | 85 ++ .../examples/cloud_autokms_example/compute.tf | 68 ++ .../examples/cloud_autokms_example/main.tf | 43 + .../examples/cloud_autokms_example/outputs.tf | 32 + .../examples/cloud_autokms_example/storage.tf | 39 + .../cloud_autokms_example/variables.tf | 21 + .../cloud_autokms_example/versions.tf | 33 + v0.2/terraform-google-autokey/main.tf | 170 +++ v0.2/terraform-google-autokey/outputs.tf | 36 + .../test/integration/discover_test.go | 25 + .../test/integration/go.mod | 82 ++ .../test/integration/go.sum | 1018 +++++++++++++++++ .../test/setup/README.md | 112 ++ .../test/setup/iam.tf | 44 + .../test/setup/main.tf | 35 + .../test/setup/outputs.tf | 24 + .../test/setup/variables.tf | 26 + .../test/setup/versions.tf | 29 + .../v0.1/CHANGELOG.md | 37 + v0.2/terraform-google-autokey/v0.1/CODEOWNERS | 12 + .../v0.1/CONTRIBUTING.md | 131 +++ v0.2/terraform-google-autokey/v0.1/LICENSE | 202 ++++ v0.2/terraform-google-autokey/v0.1/Makefile | 86 ++ v0.2/terraform-google-autokey/v0.1/README.md | 115 ++ .../terraform-google-autokey/v0.1/SECURITY.md | 4 + .../v0.1/assets/icon.png | Bin 0 -> 3738 bytes .../v0.1/build/int.cloudbuild.yaml | 44 + .../v0.1/build/lint.cloudbuild.yaml | 24 + .../examples/cloud_autokms_example/README.md | 90 ++ .../architecture-diagram.png | Bin 0 -> 64521 bytes .../v0.1/examples/cloud_autokms_example/bq.tf | 85 ++ .../examples/cloud_autokms_example/compute.tf | 68 ++ .../examples/cloud_autokms_example/main.tf | 44 + .../examples/cloud_autokms_example/outputs.tf | 32 + .../examples/cloud_autokms_example/storage.tf | 39 + .../cloud_autokms_example/variables.tf | 21 + .../cloud_autokms_example/versions.tf | 40 + v0.2/terraform-google-autokey/v0.1/main.tf | 170 +++ v0.2/terraform-google-autokey/v0.1/outputs.tf | 40 + .../v0.1/test/integration/discover_test.go | 25 + .../v0.1/test/integration/go.mod | 82 ++ .../v0.1/test/integration/go.sum | 1018 +++++++++++++++++ .../v0.1/test/setup/README.md | 97 ++ .../v0.1/test/setup/iam.tf | 44 + .../v0.1/test/setup/main.tf | 35 + .../v0.1/test/setup/outputs.tf | 24 + .../v0.1/test/setup/variables.tf | 26 + .../v0.1/test/setup/versions.tf | 29 + .../v0.1/variables.tf | 125 ++ .../terraform-google-autokey/v0.1/versions.tf | 42 + v0.2/terraform-google-autokey/variables.tf | 118 ++ v0.2/terraform-google-autokey/versions.tf | 31 + 96 files changed, 8475 insertions(+) create mode 100644 v0.1/CHANGELOG.md create mode 100644 v0.1/CODEOWNERS create mode 100644 v0.1/CONTRIBUTING.md create mode 100644 v0.1/LICENSE create mode 100644 v0.1/Makefile create mode 100644 v0.1/README.md create mode 100644 v0.1/SECURITY.md create mode 100644 v0.1/assets/icon.png create mode 100644 v0.1/build/int.cloudbuild.yaml create mode 100644 v0.1/build/lint.cloudbuild.yaml create mode 100644 v0.1/examples/cloud_autokms_example/README.md create mode 100644 v0.1/examples/cloud_autokms_example/architecture-diagram.png create mode 100644 v0.1/examples/cloud_autokms_example/bq.tf create mode 100644 v0.1/examples/cloud_autokms_example/compute.tf create mode 100644 v0.1/examples/cloud_autokms_example/main.tf create mode 100644 v0.1/examples/cloud_autokms_example/outputs.tf create mode 100644 v0.1/examples/cloud_autokms_example/storage.tf create mode 100644 v0.1/examples/cloud_autokms_example/variables.tf create mode 100644 v0.1/examples/cloud_autokms_example/versions.tf create mode 100644 v0.1/main.tf create mode 100644 v0.1/outputs.tf create mode 100644 v0.1/test/integration/discover_test.go create mode 100644 v0.1/test/integration/go.mod create mode 100644 v0.1/test/integration/go.sum create mode 100644 v0.1/test/setup/README.md create mode 100644 v0.1/test/setup/iam.tf create mode 100644 v0.1/test/setup/main.tf create mode 100644 v0.1/test/setup/outputs.tf create mode 100644 v0.1/test/setup/variables.tf create mode 100644 v0.1/test/setup/versions.tf create mode 100644 v0.1/variables.tf create mode 100644 v0.1/versions.tf create mode 100644 v0.2/terraform-google-autokey/CHANGELOG.md create mode 100644 v0.2/terraform-google-autokey/CODEOWNERS create mode 100644 v0.2/terraform-google-autokey/CONTRIBUTING.md create mode 100644 v0.2/terraform-google-autokey/LICENSE create mode 100644 v0.2/terraform-google-autokey/Makefile create mode 100644 v0.2/terraform-google-autokey/README.md create mode 100644 v0.2/terraform-google-autokey/SECURITY.md create mode 100644 v0.2/terraform-google-autokey/assets/icon.png create mode 100644 v0.2/terraform-google-autokey/build/int.cloudbuild.yaml create mode 100644 v0.2/terraform-google-autokey/build/lint.cloudbuild.yaml create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/README.md create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/architecture-diagram.png create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/bq.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/compute.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/main.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/outputs.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/storage.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/variables.tf create mode 100644 v0.2/terraform-google-autokey/examples/cloud_autokms_example/versions.tf create mode 100644 v0.2/terraform-google-autokey/main.tf create mode 100644 v0.2/terraform-google-autokey/outputs.tf create mode 100644 v0.2/terraform-google-autokey/test/integration/discover_test.go create mode 100644 v0.2/terraform-google-autokey/test/integration/go.mod create mode 100644 v0.2/terraform-google-autokey/test/integration/go.sum create mode 100644 v0.2/terraform-google-autokey/test/setup/README.md create mode 100644 v0.2/terraform-google-autokey/test/setup/iam.tf create mode 100644 v0.2/terraform-google-autokey/test/setup/main.tf create mode 100644 v0.2/terraform-google-autokey/test/setup/outputs.tf create mode 100644 v0.2/terraform-google-autokey/test/setup/variables.tf create mode 100644 v0.2/terraform-google-autokey/test/setup/versions.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/CHANGELOG.md create mode 100644 v0.2/terraform-google-autokey/v0.1/CODEOWNERS create mode 100644 v0.2/terraform-google-autokey/v0.1/CONTRIBUTING.md create mode 100644 v0.2/terraform-google-autokey/v0.1/LICENSE create mode 100644 v0.2/terraform-google-autokey/v0.1/Makefile create mode 100644 v0.2/terraform-google-autokey/v0.1/README.md create mode 100644 v0.2/terraform-google-autokey/v0.1/SECURITY.md create mode 100644 v0.2/terraform-google-autokey/v0.1/assets/icon.png create mode 100644 v0.2/terraform-google-autokey/v0.1/build/int.cloudbuild.yaml create mode 100644 v0.2/terraform-google-autokey/v0.1/build/lint.cloudbuild.yaml create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/README.md create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/architecture-diagram.png create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/bq.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/compute.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/main.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/outputs.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/storage.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/variables.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/versions.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/main.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/outputs.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/test/integration/discover_test.go create mode 100644 v0.2/terraform-google-autokey/v0.1/test/integration/go.mod create mode 100644 v0.2/terraform-google-autokey/v0.1/test/integration/go.sum create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/README.md create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/iam.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/main.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/outputs.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/variables.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/test/setup/versions.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/variables.tf create mode 100644 v0.2/terraform-google-autokey/v0.1/versions.tf create mode 100644 v0.2/terraform-google-autokey/variables.tf create mode 100644 v0.2/terraform-google-autokey/versions.tf diff --git a/v0.1/CHANGELOG.md b/v0.1/CHANGELOG.md new file mode 100644 index 0000000..140c365 --- /dev/null +++ b/v0.1/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on +[Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). +This changelog is generated automatically based on [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). + +## [0.2.0](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/compare/v0.1.0...v0.2.0) (2023-12-20) + + +### Features + +* added threat exception attribute and updated README ([#15](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/15)) ([feaddda](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/feaddda839e54dbd511476b2a82221819bd55f06)) + + +### Bug Fixes + +* **deps:** Update Terraform google to v5 ([#21](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/21)) ([c7e2ac1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/c7e2ac10b229382b842edcf7ed4db260ecc65b98)) + +## 0.1.0 (2023-05-03) + + +### Bug Fixes + +* formatting fixes ([#1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/1)) ([3ffba20](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/3ffba20ea27356467cd23d7b676a7b5b6694e9b9)) +* release-please config ([#2](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/2)) ([29a438f](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/29a438f063ea0fa86c16fe8bd0f14a3d4cfda189)) + +## [0.1.0](https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0) - 20XX-YY-ZZ + +### Features + +- Initial release + +[0.1.0]: https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0 diff --git a/v0.1/CODEOWNERS b/v0.1/CODEOWNERS new file mode 100644 index 0000000..e100848 --- /dev/null +++ b/v0.1/CODEOWNERS @@ -0,0 +1,12 @@ +# NOTE: This file is automatically generated from values at: +# https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/master/infra/terraform/test-org/org/locals.tf + +* @GoogleCloudPlatform/blueprint-solutions @mgaur10 + +# NOTE: GitHub CODEOWNERS locations: +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-and-branch-protection + +CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +.github/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +docs/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions + diff --git a/v0.1/CONTRIBUTING.md b/v0.1/CONTRIBUTING.md new file mode 100644 index 0000000..fc745e9 --- /dev/null +++ b/v0.1/CONTRIBUTING.md @@ -0,0 +1,131 @@ +# Contributing + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code Reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Development + +The following dependencies must be installed on the development system: + +- [Docker Engine][docker-engine] +- [Google Cloud SDK][google-cloud-sdk] +- [make] + +### Generating Documentation for Inputs and Outputs + +The Inputs and Outputs tables in the READMEs of the root module, +submodules, and example modules are automatically generated based on +the `variables` and `outputs` of the respective modules. These tables +must be refreshed if the module interfaces are changed. + +#### Execution + +Run `make generate_docs` to generate new Inputs and Outputs tables. + +### Integration Testing + +Integration tests are used to verify the behaviour of the root module, +submodules, and example modules. Additions, changes, and fixes should +be accompanied with tests. + +The integration tests are run using [Kitchen][kitchen], +[Kitchen-Terraform][kitchen-terraform], and [InSpec][inspec]. These +tools are packaged within a Docker image for convenience. + +The general strategy for these tests is to verify the behaviour of the +[example modules](./examples/), thus ensuring that the root module, +submodules, and example modules are all functionally correct. + +#### Test Environment +The easiest way to test the module is in an isolated test project. The setup for such a project is defined in [test/setup](./test/setup/) directory. + +To use this setup, you need a service account with these permissions (on a Folder or Organization): +- Project Creator +- Project Billing Manager + +The project that the service account belongs to must have the following APIs enabled (the setup won't +create any resources on the service account's project): +- Cloud Resource Manager +- Cloud Billing +- Service Usage +- Identity and Access Management (IAM) + +Export the Service Account credentials to your environment like so: + +``` +export SERVICE_ACCOUNT_JSON=$(< credentials.json) +``` + +You will also need to set a few environment variables: +``` +export TF_VAR_org_id="your_org_id" +export TF_VAR_folder_id="your_folder_id" +export TF_VAR_billing_account="your_billing_account_id" +``` + +With these settings in place, you can prepare a test project using Docker: +``` +make docker_test_prepare +``` + +#### Noninteractive Execution + +Run `make docker_test_integration` to test all of the example modules +noninteractively, using the prepared test project. + +#### Interactive Execution + +1. Run `make docker_run` to start the testing Docker container in + interactive mode. + +1. Run `kitchen_do create ` to initialize the working + directory for an example module. + +1. Run `kitchen_do converge ` to apply the example module. + +1. Run `kitchen_do verify ` to test the example module. + +1. Run `kitchen_do destroy ` to destroy the example module + state. + +### Linting and Formatting + +Many of the files in the repository can be linted or formatted to +maintain a standard of quality. + +#### Execution + +Run `make docker_test_lint`. + +[docker-engine]: https://www.docker.com/products/docker-engine +[flake8]: http://flake8.pycqa.org/en/latest/ +[gofmt]: https://golang.org/cmd/gofmt/ +[google-cloud-sdk]: https://cloud.google.com/sdk/install +[hadolint]: https://github.com/hadolint/hadolint +[inspec]: https://inspec.io/ +[kitchen-terraform]: https://github.com/newcontext-oss/kitchen-terraform +[kitchen]: https://kitchen.ci/ +[make]: https://en.wikipedia.org/wiki/Make_(software) +[shellcheck]: https://www.shellcheck.net/ +[terraform-docs]: https://github.com/segmentio/terraform-docs +[terraform]: https://terraform.io/ diff --git a/v0.1/LICENSE b/v0.1/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/v0.1/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/v0.1/Makefile b/v0.1/Makefile new file mode 100644 index 0000000..2f5ae41 --- /dev/null +++ b/v0.1/Makefile @@ -0,0 +1,86 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Please note that this file was generated from [terraform-google-module-template](https://github.com/terraform-google-modules/terraform-google-module-template). +# Please make sure to contribute relevant changes upstream! + +# Make will use bash instead of sh +SHELL := /usr/bin/env bash + +DOCKER_TAG_VERSION_DEVELOPER_TOOLS := 1 +DOCKER_IMAGE_DEVELOPER_TOOLS := cft/developer-tools +REGISTRY_URL := gcr.io/cloud-foundation-cicd + +# Enter docker container for local development +.PHONY: docker_run +docker_run: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash + +# Execute prepare tests within the docker container +.PHONY: docker_test_prepare +docker_test_prepare: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh prepare_environment + +# Clean up test environment within the docker container +.PHONY: docker_test_cleanup +docker_test_cleanup: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh cleanup_environment + +# Execute integration tests within the docker container +.PHONY: docker_test_integration +docker_test_integration: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_integration.sh + +# Execute lint tests within the docker container +.PHONY: docker_test_lint +docker_test_lint: + docker run --rm -it \ + -e EXCLUDE_LINT_DIRS \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_lint.sh + +# Generate documentation +.PHONY: docker_generate_docs +docker_generate_docs: + docker run --rm -it \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash -c 'source /usr/local/bin/task_helper_functions.sh && generate_docs' + +# Alias for backwards compatibility +.PHONY: generate_docs +generate_docs: docker_generate_docs diff --git a/v0.1/README.md b/v0.1/README.md new file mode 100644 index 0000000..2763509 --- /dev/null +++ b/v0.1/README.md @@ -0,0 +1,115 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://LINK-TO-BE-UPDATED). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + source = "GoogleCloudPlatform/terraform-google-autokey" + #source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| autokey\_folder\_admins | List the users who should have the authority to enable and configure Autokey at a folder level | `list(string)` | n/a | yes | +| autokey\_folder\_name | Resource folders should use KMS Autokey | `string` | `"autokey folder"` | no | +| autokey\_folder\_users | List the users who should have the authority to protect their resources with Autokey | `list(string)` | n/a | yes | +| autokey\_key\_project\_id | Project name to deploy resources | `string` | `null` | no | +| autokey\_key\_project\_name | Project name to deploy resources | `string` | `"autokey-project"` | no | +| autokey\_project\_kms\_admins | List the users who should have the authority to manage crypto operations in the Key Management Project | `list(string)` | n/a | yes | +| billing\_account | billing account required | `string` | n/a | yes | +| create\_new\_autokey\_key\_project | If true, the Terraform will create a new project for autokey key. If false, will use an existing project | `bool` | `true` | no | +| create\_new\_folder | If true, the Terraform will create a new folder. If false, will use an existing folder | `bool` | `true` | no | +| create\_new\_resource\_project | If true, the Terraform will create a new project for resources. If false, will use an existing project | `bool` | `true` | no | +| folder\_id | Resource folders should use KMS Autokey | `string` | `null` | no | +| organization\_id | Organization ID to add tags at Org level | `string` | n/a | yes | +| parent\_folder\_id | Folder ID to create child folder for autokey | `string` | n/a | yes | +| parent\_is\_folder | Folder ID to create child folder for autokey | `bool` | `true` | no | +| region | Network region for resources | `string` | n/a | yes | +| resource\_project\_id | Project id to deploy resources | `string` | `null` | no | +| resource\_project\_name | Project name to deploy resources | `string` | `"resource-project"` | no | +| skip\_delete | If true, the Terraform resource can be deleted without deleting the Project via the Google API. | `string` | `"false"` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| autokey\_config | KMS Autokey config | +| key\_project\_id | key\_project\_id | +| random\_id | random id | +| region | resources region | +| resource\_project\_id | resource\_project\_id | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.1/SECURITY.md b/v0.1/SECURITY.md new file mode 100644 index 0000000..ce1f393 --- /dev/null +++ b/v0.1/SECURITY.md @@ -0,0 +1,4 @@ +To report a security issue, please use http://g.co/vulnz. We use +http://g.co/vulnz for our intake, and do coordination and disclosure here on +GitHub (including using GitHub Security Advisory). The Google Security Team will +respond within 5 working days of your report on g.co/vulnz. diff --git a/v0.1/assets/icon.png b/v0.1/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..66eb109b4434f6ecd41b68519165345aa309e35d GIT binary patch literal 3738 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 LBUFWkZTNoyp;##U literal 0 HcmV?d00001 diff --git a/v0.1/build/int.cloudbuild.yaml b/v0.1/build/int.cloudbuild.yaml new file mode 100644 index 0000000..f22fa35 --- /dev/null +++ b/v0.1/build/int.cloudbuild.yaml @@ -0,0 +1,44 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +timeout: 3600s +steps: +- id: swap-module-refs + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['module-swapper'] +- id: prepare + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'source /usr/local/bin/task_helper_functions.sh && prepare_environment'] + env: + - 'TF_VAR_org_id=$_ORG_ID' + - 'TF_VAR_folder_id=$_FOLDER_ID' + - 'TF_VAR_billing_account=$_BILLING_ACCOUNT' +- id: cloud-ids-example-init + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage init --verbose'] +- id: cloud-ids-example-apply + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage apply --verbose'] +- id: cloud-ids-example-verify + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage verify --verbose'] +- id: cloud-ids-example-teardown + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage teardown --verbose'] +tags: +- 'ci' +- 'integration' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.1/build/lint.cloudbuild.yaml b/v0.1/build/lint.cloudbuild.yaml new file mode 100644 index 0000000..f287b56 --- /dev/null +++ b/v0.1/build/lint.cloudbuild.yaml @@ -0,0 +1,24 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +steps: +- name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + id: 'lint' + args: ['/usr/local/bin/test_lint.sh'] +tags: +- 'ci' +- 'lint' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.1/examples/cloud_autokms_example/README.md b/v0.1/examples/cloud_autokms_example/README.md new file mode 100644 index 0000000..f6e8d5c --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/README.md @@ -0,0 +1,90 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://LINK-TO-BE-UPDATED). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + +``` + + +## Inputs + +No inputs. + +## Outputs + +No outputs. + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.1/examples/cloud_autokms_example/architecture-diagram.png b/v0.1/examples/cloud_autokms_example/architecture-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dca0f56e3ca771afdb0be8f3e599e1d052619f98 GIT binary patch literal 64521 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 z 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 V??Z$T-Hf<;Jk?wFMX+ag=Z11_k0>UtmF;fP7 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⪚lz5&B;j0+%IXAb*c@r zyz}Tw#mZR10~wwR&#K1fC zRc`jrvb*mFpC9}})`gX+hibVA#+xUtjCsmcUE3gfxwbpHHe}AP1+7Uxhig?>YPdXh zs|_D|)AvH!U25FrrM+j`y1cxZ@M^1+x#XSUS7m7}gEk!x+9oVUzMm{971Q&ys%%as zl_quZRCUUK&CpxRP~`tvu5+aKTqW}t*~_~mJ|mmIt*UF0dg3pF9jhFzj>rtspq1^m zUM;og|9r(87X>&JQpE(;|G+y0dke7ZOz%xE{I{8x189C=F)I28%zxt?Boc@UFNc&W z{!gH(sK*)24%Fg?Ln*RiQzlr`!=w&b?Hi@=n<$s#nfM7#lzTN6y zr1=fz0D1x;k=WU&!T)J~c^1eQwj?(E7vO0Vgn&%Q#d8I}&+z|;3~xT7 YAuUfcus+YyrvP4BxAkrntJ#G7A1ek-vj6}9 literal 0 HcmV?d00001 diff --git a/v0.1/examples/cloud_autokms_example/bq.tf b/v0.1/examples/cloud_autokms_example/bq.tf new file mode 100644 index 0000000..2d12f52 --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/bq.tf @@ -0,0 +1,85 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + +# Enable the necessary API service +resource "google_project_service" "bq_project_api_service" { + for_each = toset([ + "bigquery.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api_bq" { + depends_on = [google_project_service.bq_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + + +# Create autokey handle for BQ dataset +resource "google_kms_key_handle" "bq_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "bq-auto-key-handle" + location = module.autokey.region + resource_type_selector = "bigquery.googleapis.com/Dataset" + depends_on = [ + module.autokey, + google_project_service.bq_project_api_service + ] +} + + + +# Create dataset in bigquery protected by autokey +resource "google_bigquery_dataset" "dataset" { + dataset_id = "dataset_${module.autokey.random_id}" + location = module.autokey.region + project = module.autokey.resource_project_id + delete_contents_on_destroy = true + default_encryption_configuration { + kms_key_name = google_kms_key_handle.bq_key_handle.kms_key + } + + depends_on = [ + time_sleep.wait_enable_service_api_bq, + ] +} + + + + + +# Create table in bigquery +resource "google_bigquery_table" "clear_table" { + dataset_id = google_bigquery_dataset.dataset.dataset_id + project = module.autokey.resource_project_id + table_id = "clear-data" + description = "This table contain clear dummy text sensitive data" + deletion_protection = false + depends_on = [google_bigquery_dataset.dataset] +} \ No newline at end of file diff --git a/v0.1/examples/cloud_autokms_example/compute.tf b/v0.1/examples/cloud_autokms_example/compute.tf new file mode 100644 index 0000000..606ca9e --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/compute.tf @@ -0,0 +1,68 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + +# Enable the necessary API service +resource "google_project_service" "compute_project_api_service" { + for_each = toset([ + "compute.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling API +resource "time_sleep" "wait_enable_service_api_compute" { + depends_on = [google_project_service.compute_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + +# Create autokey handle for compute disk +resource "google_kms_key_handle" "disk_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "disk-auto-key-handle" + location = module.autokey.region + resource_type_selector = "compute.googleapis.com/Disk" + depends_on = [ + module.autokey, + google_project_service.compute_project_api_service + ] +} + + +# Create compute disk protected by autokey +resource "google_compute_disk" "persistant_disk" { + project = module.autokey.resource_project_id + name = "persistant-disk" + type = "pd-ssd" + zone = "us-central1-a" + size = 30 + physical_block_size_bytes = 4096 + disk_encryption_key { + kms_key_self_link = google_kms_key_handle.disk_key_handle.kms_key + } + depends_on = [time_sleep.wait_enable_service_api_compute] +} + diff --git a/v0.1/examples/cloud_autokms_example/main.tf b/v0.1/examples/cloud_autokms_example/main.tf new file mode 100644 index 0000000..d52c8c3 --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/main.tf @@ -0,0 +1,44 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + + +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" ## update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + diff --git a/v0.1/examples/cloud_autokms_example/outputs.tf b/v0.1/examples/cloud_autokms_example/outputs.tf new file mode 100644 index 0000000..f647977 --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/outputs.tf @@ -0,0 +1,32 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +/* +output "autokey_config" { + description = "autokey_config" + + value = module.autokey.autokey_config +} + +output "my_key_handle" { + description = "my_key_handle" + + value = module.autokey.my_key_handle +} +*/ \ No newline at end of file diff --git a/v0.1/examples/cloud_autokms_example/storage.tf b/v0.1/examples/cloud_autokms_example/storage.tf new file mode 100644 index 0000000..18f4ed6 --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/storage.tf @@ -0,0 +1,39 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +# Create autokey handle for storage bucket +resource "google_kms_key_handle" "gcs_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "gcs-auto-key-handle" + location = module.autokey.region + resource_type_selector = "storage.googleapis.com/Bucket" + depends_on = [module.autokey] +} + + +# Create storage bucket protected by autokey +resource "google_storage_bucket" "simple_bucket_name" { + name = "simple_bucket_${module.autokey.random_id}" + location = module.autokey.region + force_destroy = true + project = module.autokey.resource_project_id + uniform_bucket_level_access = true + encryption { + default_kms_key_name = google_kms_key_handle.gcs_key_handle.kms_key + } +} diff --git a/v0.1/examples/cloud_autokms_example/variables.tf b/v0.1/examples/cloud_autokms_example/variables.tf new file mode 100644 index 0000000..ed19868 --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/variables.tf @@ -0,0 +1,21 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + diff --git a/v0.1/examples/cloud_autokms_example/versions.tf b/v0.1/examples/cloud_autokms_example/versions.tf new file mode 100644 index 0000000..442151b --- /dev/null +++ b/v0.1/examples/cloud_autokms_example/versions.tf @@ -0,0 +1,40 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +/* +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 4.0" + } + } + required_version = ">= 0.13" +} */ + +terraform { + required_providers { + google-private = { + source = "google.com/providers/google-private" + version = "0.0.1844" + } + } +} + diff --git a/v0.1/main.tf b/v0.1/main.tf new file mode 100644 index 0000000..21a6a01 --- /dev/null +++ b/v0.1/main.tf @@ -0,0 +1,170 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +resource "random_id" "random_suffix" { + byte_length = 4 +} + + +locals { + # project ID for autokey key project + autokey_key_project_id = var.create_new_autokey_key_project ? "${var.autokey_key_project_name}-${random_id.random_suffix.hex}" : var.autokey_key_project_id + autokey_key_project_number = data.google_project.key_project.number + + # project ID for resource project + resource_project_id = var.create_new_resource_project ? "${var.resource_project_name}-${random_id.random_suffix.hex}" : var.resource_project_id + resource_project_number = data.google_project.resource_project.number +} + + +data "google_project" "key_project" { + project_id = local.autokey_key_project_id + depends_on = [google_project.key_project] +} + + +data "google_project" "resource_project" { + project_id = local.resource_project_id + depends_on = [google_project.resource_project] +} + + + + + +# Create Folder in GCP Organization +resource "google_folder" "autokey_folder" { + count = var.create_new_folder ? 1 : 0 + display_name = "${var.autokey_folder_name}-${random_id.random_suffix.hex}" + # parent = "organizations/${var.organization_id}" + parent = var.parent_is_folder ? "folders/${var.parent_folder_id}" : "organizations/${var.organization_id}" +} + + +# Create the project +resource "google_project" "key_project" { + count = var.create_new_autokey_key_project ? 1 : 0 + billing_account = var.billing_account + + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + name = var.autokey_key_project_name + project_id = local.autokey_key_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +# Create the project +resource "google_project" "resource_project" { + count = var.create_new_resource_project ? 1 : 0 + billing_account = var.billing_account + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + name = var.resource_project_name + project_id = local.resource_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +#Set permissions for key admins to use Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_admin" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + role = "roles/cloudkms.autokeyAdmin" + members = var.autokey_folder_admins +} + +#Set permissions for users to protect resources with Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_users" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + role = "roles/cloudkms.autokeyUser" + members = var.autokey_folder_users +} + +#Set permissions for key admins to use Autokey in this project +resource "google_project_iam_binding" "autokey_project_admin" { + count = 1 + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + members = var.autokey_project_kms_admins + depends_on = [google_project.key_project] +} + + + +# Enable the necessary API services +resource "google_project_service" "autokey_api_service" { + for_each = toset([ + "cloudkms.googleapis.com", + ]) + + service = each.key + project = local.autokey_key_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [google_project.key_project] + +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api" { + depends_on = [google_project_service.autokey_api_service] + create_duration = "30s" + destroy_duration = "15s" +} + + +#Create KMS Service Agent +resource "google_project_service_identity" "KMS_Service_Agent" { + provider = google-beta + service = "cloudkms.googleapis.com" + project = local.autokey_key_project_id + depends_on = [time_sleep.wait_enable_service_api] +} + + + +#Grant the KMS Service Agent the Cloud KMS Admin role +resource "google_project_iam_member" "autokey_project_admin" { + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + member = "serviceAccount:service-${local.autokey_key_project_number}@gcp-sa-cloudkms.iam.gserviceaccount.com" + depends_on = [google_project_service_identity.KMS_Service_Agent] +} + +# Wait delay kms service account IAM permissions +resource "time_sleep" "wait_srv_acc_priv" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_project_iam_member.autokey_project_admin] +} + +resource "google_kms_autokey_config" "autokey_config" { + count = 1 + provider = google-private + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].folder_id : "${var.parent_folder_id}" + key_project = "projects/${local.autokey_key_project_number}" + depends_on = [time_sleep.wait_srv_acc_priv] +} + + +# Wait delay for autokey config rollout +resource "time_sleep" "wait_autokey_config" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_kms_autokey_config.autokey_config] +} + + diff --git a/v0.1/outputs.tf b/v0.1/outputs.tf new file mode 100644 index 0000000..b54edab --- /dev/null +++ b/v0.1/outputs.tf @@ -0,0 +1,40 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +output "autokey_config" { + description = "KMS Autokey config" + value = google_kms_autokey_config.autokey_config +} + + +output "key_project_id" { + description = "key_project_id" + value = data.google_project.key_project.project_id +} + +output "resource_project_id" { + description = "resource_project_id" + value = data.google_project.resource_project.project_id +} + +output "region" { + description = "resources region " + value = var.region +} + +output "random_id" { + description = "random id" + value = random_id.random_suffix.hex +} \ No newline at end of file diff --git a/v0.1/test/integration/discover_test.go b/v0.1/test/integration/discover_test.go new file mode 100644 index 0000000..349a396 --- /dev/null +++ b/v0.1/test/integration/discover_test.go @@ -0,0 +1,25 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package test + +import ( + "testing" + + "github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test/pkg/tft" +) + +func TestAll(t *testing.T) { + tft.AutoDiscoverAndTest(t) +} diff --git a/v0.1/test/integration/go.mod b/v0.1/test/integration/go.mod new file mode 100644 index 0000000..ce82874 --- /dev/null +++ b/v0.1/test/integration/go.mod @@ -0,0 +1,82 @@ +module github.com/terraform-google-modules/cloud-ids/test/integration + +go 1.21 + +toolchain go1.21.9 + +require github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 + +require ( + cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/storage v1.33.0 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/alexflint/go-filemutex v1.3.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/aws/aws-sdk-go v1.45.5 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/go-errors/errors v1.5.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/gruntwork-io/terratest v0.46.13 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f // indirect + github.com/hashicorp/hcl/v2 v2.18.0 // indirect + github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 // indirect + github.com/hashicorp/terraform-json v0.17.1 // indirect + github.com/jinzhu/copier v0.4.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-zglob v0.0.4 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/tidwall/gjson v1.17.1 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/tmccombs/hcl2json v0.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zclconf/go-cty v1.14.0 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.138.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.58.3 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/v0.1/test/integration/go.sum b/v0.1/test/integration/go.sum new file mode 100644 index 0000000..9272e9e --- /dev/null +++ b/v0.1/test/integration/go.sum @@ -0,0 +1,1018 @@ +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.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.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +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/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +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= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= +cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 h1:db17HvmQPwTAq7/ex/w2DiNMA4oGUmTiHvScfPW/cRI= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0/go.mod h1:JSsaDg/h4yaiNNTNnrCjyL6/czHb/Oz/z+dzWVqJYBE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alexflint/go-filemutex v1.3.0 h1:LgE+nTUWnQCyRKbpoceKZsPQbs84LivvgwUymZXdOcM= +github.com/alexflint/go-filemutex v1.3.0/go.mod h1:U0+VA/i30mGBlLCrFPGtTe9y6wGQfNAWPBTekHQ+c8A= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.45.5 h1:bxilnhv9FngUgdPNJmOIv2bk+2sP0dpqX3e4olhWcGM= +github.com/aws/aws-sdk-go v1.45.5/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +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-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +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/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.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= +github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +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/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +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.3/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/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +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.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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 h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +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.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gruntwork-io/terratest v0.46.13 h1:FDaEoZ7DtkomV8pcwLdBV/VsytdjnPRqJkIriYEYwjs= +github.com/gruntwork-io/terratest v0.46.13/go.mod h1:8sxu3Qup8TxtbzOHzq0MUrQffJj/G61/OwlsReaCwpo= +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/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-getter v1.7.2 h1:uJDtyXwEfalmp1PqdxuhZqrNkUyClZAhVeZYTArbqkg= +github.com/hashicorp/go-getter v1.7.2/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws= +github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= +github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 h1:nZ5gGjbe5o7XUu1d7j+Y5Ztcxlp+yaumTKH9i0D3wlg= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72/go.mod h1:l8HcFPm9cQh6Q0KSWoYPiePqMvRFenybP1CH2MjKdlg= +github.com/hashicorp/terraform-json v0.17.1 h1:eMfvh/uWggKmY7Pmb3T85u86E2EQg6EQHgyRwf3RkyA= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +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/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/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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= +github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= +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.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 h1:drhDO54gdT/a15GBcMRmunZiNcLgPiFIJa23KzmcvcU= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770/go.mod h1:SO/iHr6q2EzbqRApt+8/E9wqebTwQn5y+UlB04bxzo0= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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.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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= +github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tmccombs/hcl2json v0.6.0 h1:Qc5NL4NQbpNnw8w8HQcA3GsVHvQDJXJwVTUxf2AEhOs= +github.com/tmccombs/hcl2json v0.6.0/go.mod h1:QNirG4H64ZvlFsy9werRxXlWNTDR1GhWzXkjqPILHwo= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= +github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +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.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +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= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +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/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/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/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.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-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-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-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/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-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/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.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +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-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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/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-20190606165138-5da285871e9c/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-20191001151750-bb3f8db39f24/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-20200113162924-86b910548bc1/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-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +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/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-20190606124116-d0a3d012864b/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-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-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-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.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.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.138.0 h1:K/tVp05MxNVbHShRw9m7e9VJGdagNeTdMzqPH7AUqr0= +google.golang.org/api v0.138.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY= +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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +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-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-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +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.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.31.1/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.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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.8/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.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/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +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/kustomize/kyaml v0.17.0 h1:G2bWs03V9Ur2PinHLzTUJ8Ded+30SzXZKiO92SRDs3c= +sigs.k8s.io/kustomize/kyaml v0.17.0/go.mod h1:6lxkYF1Cv9Ic8g/N7I86cvxNc5iinUo/P2vKsHNmpyE= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/v0.1/test/setup/README.md b/v0.1/test/setup/README.md new file mode 100644 index 0000000..cf554da --- /dev/null +++ b/v0.1/test/setup/README.md @@ -0,0 +1,97 @@ +# Cloud IDS Terraform Module +This module makes it easy to setup [Cloud IDS](https://cloud.google.com/ids), set up [private services access](https://cloud.google.com/vpc/docs/private-services-access) and a [packet mirroring policy](https://cloud.google.com/vpc/docs/using-packet-mirroring). + +The packet mirroring policy requires at least one of the three below options: +- [Tags](#pre_configured_rules): Up to 5 asset tags can be specified. +- [Subnets](#security_rules): Up to 5 subnets can be specified. +- [Instances](#custom_rules): Up to 50 instance can be specified. + +## Usage + +```tf +module cloud_ids { + source = "GoogleCloudPlatform/terraform-google-cloud-ids" + + project_id = "" + vpc_network_name = "" + network_region = "" + network_zone = "" + instance_list = [ + "projects//zones//instances/", + "projects//zones//instances/", + ] + subnet_list = [ + "projects//regions//subnetworks/", + "projects//regions//subnetworks/", + ] + tag_list = ["", "", "", ""] + ids_private_ip_range_name = "ids-private-address" + ids_private_ip_address = "10.10.10.0" + ids_private_ip_prefix_length = 24 + ids_private_ip_description = "Cloud IDS reserved IP Range" + ids_name = "cloud-ids" + severity = "INFORMATIONAL" + packet_mirroring_policy_name = "cloud-ids-packet-mirroring" + packet_mirroring_policy_description = "Packet mirroring policy for Cloud IDS" +} +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| billing\_account | The billing account id associated with the project, e.g. XXXXXX-YYYYYY-ZZZZZZ | `any` | n/a | yes | +| folder\_id | The folder to deploy in | `any` | n/a | yes | +| org\_id | The numeric organization id | `any` | n/a | yes | + +## Outputs + +| Name | Description | +|------|-------------| +| project\_id | n/a | +| sa\_key | n/a | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account + +A service account with the following roles must be used to provision +the resources of this module: + +- Cloud IDS Admin: `roles/ids.admin` +- Compute Packet Mirroring User: `roles/compute.packetMirroringUser` +- Logs Viewer: `roles/logging.viewer` + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud IDS API: `ids.googleapis.com` +- Cloud Logging API: `logging.googleapis.com` +- Compute Engine API: `compute.googleapis.com` +- Service Networking API: `servicenetworking.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.1/test/setup/iam.tf b/v0.1/test/setup/iam.tf new file mode 100644 index 0000000..a66f9bc --- /dev/null +++ b/v0.1/test/setup/iam.tf @@ -0,0 +1,44 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + int_required_roles = [ + "roles/compute.admin", + "roles/iam.serviceAccountAdmin", + "roles/iam.serviceAccountUser", + "roles/ids.admin", + "roles/logging.viewer", + "roles/servicenetworking.networksAdmin", + ] +} + +resource "google_service_account" "int_test" { + project = module.project.project_id + account_id = "ci-account" + display_name = "ci-account" +} + +resource "google_project_iam_member" "int_test" { + for_each = toset(local.int_required_roles) + + project = module.project.project_id + role = each.value + member = "serviceAccount:${google_service_account.int_test.email}" +} + +resource "google_service_account_key" "int_test" { + service_account_id = google_service_account.int_test.id +} diff --git a/v0.1/test/setup/main.tf b/v0.1/test/setup/main.tf new file mode 100644 index 0000000..cefcfc1 --- /dev/null +++ b/v0.1/test/setup/main.tf @@ -0,0 +1,35 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "project" { + source = "terraform-google-modules/project-factory/google" + version = "~> 14.0" + + name = "ci-cloud-ids" + random_project_id = "true" + org_id = var.org_id + folder_id = var.folder_id + billing_account = var.billing_account + + activate_apis = [ + "cloudresourcemanager.googleapis.com", + "iam.googleapis.com", + "ids.googleapis.com", + "storage-api.googleapis.com", + "servicenetworking.googleapis.com", + "serviceusage.googleapis.com", + ] +} diff --git a/v0.1/test/setup/outputs.tf b/v0.1/test/setup/outputs.tf new file mode 100644 index 0000000..357bb1e --- /dev/null +++ b/v0.1/test/setup/outputs.tf @@ -0,0 +1,24 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "project_id" { + value = module.project.project_id +} + +output "sa_key" { + value = google_service_account_key.int_test.private_key + sensitive = true +} diff --git a/v0.1/test/setup/variables.tf b/v0.1/test/setup/variables.tf new file mode 100644 index 0000000..6d80b89 --- /dev/null +++ b/v0.1/test/setup/variables.tf @@ -0,0 +1,26 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +variable "org_id" { + description = "The numeric organization id" +} + +variable "folder_id" { + description = "The folder to deploy in" +} + +variable "billing_account" { + description = "The billing account id associated with the project, e.g. XXXXXX-YYYYYY-ZZZZZZ" +} diff --git a/v0.1/test/setup/versions.tf b/v0.1/test/setup/versions.tf new file mode 100644 index 0000000..470b015 --- /dev/null +++ b/v0.1/test/setup/versions.tf @@ -0,0 +1,29 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.25.0" + } + google-beta = { + source = "hashicorp/google-beta" + version = ">= 3.25.0" + } + } +} diff --git a/v0.1/variables.tf b/v0.1/variables.tf new file mode 100644 index 0000000..997946f --- /dev/null +++ b/v0.1/variables.tf @@ -0,0 +1,125 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +variable "billing_account" { + type = string + description = "billing account required" +} + + +variable "organization_id" { + type = string + description = "Organization ID to add tags at Org level" +} + +variable "parent_folder_id" { + description = "Folder ID to create child folder for autokey" + type = string +} + +variable "parent_is_folder" { + description = "Folder ID to create child folder for autokey" + type = bool + default = true ## false to use org_id as parent for autokey resources +} + + + +variable "create_new_folder" { + description = " If true, the Terraform will create a new folder. If false, will use an existing folder" + type = bool + default = true ## update to 'false' to use an existing folder +} + +variable "folder_id" { + type = string + description = "Resource folders should use KMS Autokey" + default = null +} + +variable "autokey_folder_name" { + type = string + description = "Resource folders should use KMS Autokey" + default = "autokey folder" ## applicable only if creating new folder +} + +variable "create_new_autokey_key_project" { + description = " If true, the Terraform will create a new project for autokey key. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "autokey_key_project_name" { + type = string + description = "Project name to deploy resources" + default = "autokey-project" # no spaces only aalowed to have characters, numbers and special characters +} + +variable "autokey_key_project_id" { + type = string + description = "Project name to deploy resources" + default = null +} + +variable "create_new_resource_project" { + description = " If true, the Terraform will create a new project for resources. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "resource_project_name" { + type = string + description = "Project name to deploy resources" + default = "resource-project" # no spaces only aalowed to have characters, numbers and special characters + +} + +variable "resource_project_id" { + type = string + description = "Project id to deploy resources" + default = null +} + + +variable "skip_delete" { + description = " If true, the Terraform resource can be deleted without deleting the Project via the Google API." + default = "false" +} + + + +variable "autokey_folder_admins" { + type = list(string) + description = "List the users who should have the authority to enable and configure Autokey at a folder level" +} + + +variable "autokey_folder_users" { + type = list(string) + description = "List the users who should have the authority to protect their resources with Autokey" +} + + +variable "autokey_project_kms_admins" { + type = list(string) + description = "List the users who should have the authority to manage crypto operations in the Key Management Project" +} + + +variable "region" { + type = string + description = "Network region for resources" +} + diff --git a/v0.1/versions.tf b/v0.1/versions.tf new file mode 100644 index 0000000..97704c3 --- /dev/null +++ b/v0.1/versions.tf @@ -0,0 +1,42 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +/* +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.53, < 6" + } + } + + provider_meta "google" { + module_name = "blueprints/terraform/cloud-ids/v0.2.0" + } +} +*/ + +terraform { + required_providers { + google-private = { + source = "google.com/providers/google-private" + version = "0.0.1844" + } + } +} +provider "google-private" { + project = local.autokey_key_project_id + region = var.region + # USER_PROJECT_OVERRIDE=true +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/CHANGELOG.md b/v0.2/terraform-google-autokey/CHANGELOG.md new file mode 100644 index 0000000..140c365 --- /dev/null +++ b/v0.2/terraform-google-autokey/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on +[Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). +This changelog is generated automatically based on [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). + +## [0.2.0](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/compare/v0.1.0...v0.2.0) (2023-12-20) + + +### Features + +* added threat exception attribute and updated README ([#15](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/15)) ([feaddda](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/feaddda839e54dbd511476b2a82221819bd55f06)) + + +### Bug Fixes + +* **deps:** Update Terraform google to v5 ([#21](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/21)) ([c7e2ac1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/c7e2ac10b229382b842edcf7ed4db260ecc65b98)) + +## 0.1.0 (2023-05-03) + + +### Bug Fixes + +* formatting fixes ([#1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/1)) ([3ffba20](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/3ffba20ea27356467cd23d7b676a7b5b6694e9b9)) +* release-please config ([#2](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/2)) ([29a438f](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/29a438f063ea0fa86c16fe8bd0f14a3d4cfda189)) + +## [0.1.0](https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0) - 20XX-YY-ZZ + +### Features + +- Initial release + +[0.1.0]: https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0 diff --git a/v0.2/terraform-google-autokey/CODEOWNERS b/v0.2/terraform-google-autokey/CODEOWNERS new file mode 100644 index 0000000..e100848 --- /dev/null +++ b/v0.2/terraform-google-autokey/CODEOWNERS @@ -0,0 +1,12 @@ +# NOTE: This file is automatically generated from values at: +# https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/master/infra/terraform/test-org/org/locals.tf + +* @GoogleCloudPlatform/blueprint-solutions @mgaur10 + +# NOTE: GitHub CODEOWNERS locations: +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-and-branch-protection + +CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +.github/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +docs/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions + diff --git a/v0.2/terraform-google-autokey/CONTRIBUTING.md b/v0.2/terraform-google-autokey/CONTRIBUTING.md new file mode 100644 index 0000000..fc745e9 --- /dev/null +++ b/v0.2/terraform-google-autokey/CONTRIBUTING.md @@ -0,0 +1,131 @@ +# Contributing + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code Reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Development + +The following dependencies must be installed on the development system: + +- [Docker Engine][docker-engine] +- [Google Cloud SDK][google-cloud-sdk] +- [make] + +### Generating Documentation for Inputs and Outputs + +The Inputs and Outputs tables in the READMEs of the root module, +submodules, and example modules are automatically generated based on +the `variables` and `outputs` of the respective modules. These tables +must be refreshed if the module interfaces are changed. + +#### Execution + +Run `make generate_docs` to generate new Inputs and Outputs tables. + +### Integration Testing + +Integration tests are used to verify the behaviour of the root module, +submodules, and example modules. Additions, changes, and fixes should +be accompanied with tests. + +The integration tests are run using [Kitchen][kitchen], +[Kitchen-Terraform][kitchen-terraform], and [InSpec][inspec]. These +tools are packaged within a Docker image for convenience. + +The general strategy for these tests is to verify the behaviour of the +[example modules](./examples/), thus ensuring that the root module, +submodules, and example modules are all functionally correct. + +#### Test Environment +The easiest way to test the module is in an isolated test project. The setup for such a project is defined in [test/setup](./test/setup/) directory. + +To use this setup, you need a service account with these permissions (on a Folder or Organization): +- Project Creator +- Project Billing Manager + +The project that the service account belongs to must have the following APIs enabled (the setup won't +create any resources on the service account's project): +- Cloud Resource Manager +- Cloud Billing +- Service Usage +- Identity and Access Management (IAM) + +Export the Service Account credentials to your environment like so: + +``` +export SERVICE_ACCOUNT_JSON=$(< credentials.json) +``` + +You will also need to set a few environment variables: +``` +export TF_VAR_org_id="your_org_id" +export TF_VAR_folder_id="your_folder_id" +export TF_VAR_billing_account="your_billing_account_id" +``` + +With these settings in place, you can prepare a test project using Docker: +``` +make docker_test_prepare +``` + +#### Noninteractive Execution + +Run `make docker_test_integration` to test all of the example modules +noninteractively, using the prepared test project. + +#### Interactive Execution + +1. Run `make docker_run` to start the testing Docker container in + interactive mode. + +1. Run `kitchen_do create ` to initialize the working + directory for an example module. + +1. Run `kitchen_do converge ` to apply the example module. + +1. Run `kitchen_do verify ` to test the example module. + +1. Run `kitchen_do destroy ` to destroy the example module + state. + +### Linting and Formatting + +Many of the files in the repository can be linted or formatted to +maintain a standard of quality. + +#### Execution + +Run `make docker_test_lint`. + +[docker-engine]: https://www.docker.com/products/docker-engine +[flake8]: http://flake8.pycqa.org/en/latest/ +[gofmt]: https://golang.org/cmd/gofmt/ +[google-cloud-sdk]: https://cloud.google.com/sdk/install +[hadolint]: https://github.com/hadolint/hadolint +[inspec]: https://inspec.io/ +[kitchen-terraform]: https://github.com/newcontext-oss/kitchen-terraform +[kitchen]: https://kitchen.ci/ +[make]: https://en.wikipedia.org/wiki/Make_(software) +[shellcheck]: https://www.shellcheck.net/ +[terraform-docs]: https://github.com/segmentio/terraform-docs +[terraform]: https://terraform.io/ diff --git a/v0.2/terraform-google-autokey/LICENSE b/v0.2/terraform-google-autokey/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/v0.2/terraform-google-autokey/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/v0.2/terraform-google-autokey/Makefile b/v0.2/terraform-google-autokey/Makefile new file mode 100644 index 0000000..2f5ae41 --- /dev/null +++ b/v0.2/terraform-google-autokey/Makefile @@ -0,0 +1,86 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Please note that this file was generated from [terraform-google-module-template](https://github.com/terraform-google-modules/terraform-google-module-template). +# Please make sure to contribute relevant changes upstream! + +# Make will use bash instead of sh +SHELL := /usr/bin/env bash + +DOCKER_TAG_VERSION_DEVELOPER_TOOLS := 1 +DOCKER_IMAGE_DEVELOPER_TOOLS := cft/developer-tools +REGISTRY_URL := gcr.io/cloud-foundation-cicd + +# Enter docker container for local development +.PHONY: docker_run +docker_run: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash + +# Execute prepare tests within the docker container +.PHONY: docker_test_prepare +docker_test_prepare: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh prepare_environment + +# Clean up test environment within the docker container +.PHONY: docker_test_cleanup +docker_test_cleanup: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh cleanup_environment + +# Execute integration tests within the docker container +.PHONY: docker_test_integration +docker_test_integration: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_integration.sh + +# Execute lint tests within the docker container +.PHONY: docker_test_lint +docker_test_lint: + docker run --rm -it \ + -e EXCLUDE_LINT_DIRS \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_lint.sh + +# Generate documentation +.PHONY: docker_generate_docs +docker_generate_docs: + docker run --rm -it \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash -c 'source /usr/local/bin/task_helper_functions.sh && generate_docs' + +# Alias for backwards compatibility +.PHONY: generate_docs +generate_docs: docker_generate_docs diff --git a/v0.2/terraform-google-autokey/README.md b/v0.2/terraform-google-autokey/README.md new file mode 100644 index 0000000..a73f9bf --- /dev/null +++ b/v0.2/terraform-google-autokey/README.md @@ -0,0 +1,112 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://cloud.google.com/kms/docs/autokey-overview). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + source = "GoogleCloudPlatform/terraform-google-autokey" + #source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] +} + +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| autokey\_folder\_admins | List the users who should have the authority to enable and configure Autokey at a folder level | `list(string)` | n/a | yes | +| autokey\_folder\_name | Resource folders should use KMS Autokey | `string` | `"autokey folder"` | no | +| autokey\_folder\_users | List the users who should have the authority to protect their resources with Autokey | `list(string)` | n/a | yes | +| autokey\_key\_project\_id | Project name to deploy resources | `string` | `null` | no | +| autokey\_key\_project\_name | Project name to deploy resources | `string` | `"autokey-project"` | no | +| autokey\_project\_kms\_admins | List the users who should have the authority to manage crypto operations in the Key Management Project | `list(string)` | n/a | yes | +| billing\_account | billing account required | `string` | n/a | yes | +| create\_new\_autokey\_key\_project | If true, the Terraform will create a new project for autokey key. If false, will use an existing project | `bool` | `true` | no | +| create\_new\_folder | If true, the Terraform will create a new folder. If false, will use an existing folder | `bool` | `true` | no | +| create\_new\_resource\_project | If true, the Terraform will create a new project for resources. If false, will use an existing project | `bool` | `true` | no | +| folder\_id | Resource folders should use KMS Autokey | `string` | `null` | no | +| organization\_id | Organization ID to add tags at Org level | `string` | n/a | yes | +| parent\_folder\_id | Folder ID to create child folder for autokey | `string` | n/a | yes | +| parent\_is\_folder | Folder ID to create child folder for autokey | `bool` | `true` | no | +| resource\_project\_id | Project id to deploy resources | `string` | `null` | no | +| resource\_project\_name | Project name to deploy resources | `string` | `"resource-project"` | no | +| skip\_delete | If true, the Terraform resource can be deleted without deleting the Project via the Google API. | `string` | `"false"` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| autokey\_config | KMS Autokey config | +| key\_project\_id | key\_project\_id | +| random\_id | random id | +| resource\_project\_id | resource\_project\_id | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/SECURITY.md b/v0.2/terraform-google-autokey/SECURITY.md new file mode 100644 index 0000000..ce1f393 --- /dev/null +++ b/v0.2/terraform-google-autokey/SECURITY.md @@ -0,0 +1,4 @@ +To report a security issue, please use http://g.co/vulnz. We use +http://g.co/vulnz for our intake, and do coordination and disclosure here on +GitHub (including using GitHub Security Advisory). The Google Security Team will +respond within 5 working days of your report on g.co/vulnz. diff --git a/v0.2/terraform-google-autokey/assets/icon.png b/v0.2/terraform-google-autokey/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..66eb109b4434f6ecd41b68519165345aa309e35d GIT binary patch literal 3738 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 LBUFWkZTNoyp;##U literal 0 HcmV?d00001 diff --git a/v0.2/terraform-google-autokey/build/int.cloudbuild.yaml b/v0.2/terraform-google-autokey/build/int.cloudbuild.yaml new file mode 100644 index 0000000..f22fa35 --- /dev/null +++ b/v0.2/terraform-google-autokey/build/int.cloudbuild.yaml @@ -0,0 +1,44 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +timeout: 3600s +steps: +- id: swap-module-refs + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['module-swapper'] +- id: prepare + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'source /usr/local/bin/task_helper_functions.sh && prepare_environment'] + env: + - 'TF_VAR_org_id=$_ORG_ID' + - 'TF_VAR_folder_id=$_FOLDER_ID' + - 'TF_VAR_billing_account=$_BILLING_ACCOUNT' +- id: cloud-ids-example-init + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage init --verbose'] +- id: cloud-ids-example-apply + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage apply --verbose'] +- id: cloud-ids-example-verify + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage verify --verbose'] +- id: cloud-ids-example-teardown + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage teardown --verbose'] +tags: +- 'ci' +- 'integration' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.2/terraform-google-autokey/build/lint.cloudbuild.yaml b/v0.2/terraform-google-autokey/build/lint.cloudbuild.yaml new file mode 100644 index 0000000..f287b56 --- /dev/null +++ b/v0.2/terraform-google-autokey/build/lint.cloudbuild.yaml @@ -0,0 +1,24 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +steps: +- name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + id: 'lint' + args: ['/usr/local/bin/test_lint.sh'] +tags: +- 'ci' +- 'lint' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/README.md b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/README.md new file mode 100644 index 0000000..0c167cf --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/README.md @@ -0,0 +1,90 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://cloud.google.com/kms/docs/autokey-overview). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. +- This example creates a BigQuery, Storage and Compute resource in three different US regions. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] +} + +``` + + +## Inputs + +No inputs. + +## Outputs + +No outputs. + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/architecture-diagram.png b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/architecture-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dca0f56e3ca771afdb0be8f3e599e1d052619f98 GIT binary patch literal 64521 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 z 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 V??Z$T-Hf<;Jk?wFMX+ag=Z11_k0>UtmF;fP7 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⪚lz5&B;j0+%IXAb*c@r zyz}Tw#mZR10~wwR&#K1fC zRc`jrvb*mFpC9}})`gX+hibVA#+xUtjCsmcUE3gfxwbpHHe}AP1+7Uxhig?>YPdXh zs|_D|)AvH!U25FrrM+j`y1cxZ@M^1+x#XSUS7m7}gEk!x+9oVUzMm{971Q&ys%%as zl_quZRCUUK&CpxRP~`tvu5+aKTqW}t*~_~mJ|mmIt*UF0dg3pF9jhFzj>rtspq1^m zUM;og|9r(87X>&JQpE(;|G+y0dke7ZOz%xE{I{8x189C=F)I28%zxt?Boc@UFNc&W z{!gH(sK*)24%Fg?Ln*RiQzlr`!=w&b?Hi@=n<$s#nfM7#lzTN6y zr1=fz0D1x;k=WU&!T)J~c^1eQwj?(E7vO0Vgn&%Q#d8I}&+z|;3~xT7 YAuUfcus+YyrvP4BxAkrntJ#G7A1ek-vj6}9 literal 0 HcmV?d00001 diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/bq.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/bq.tf new file mode 100644 index 0000000..7de7ef7 --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/bq.tf @@ -0,0 +1,85 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + +# Enable the necessary API service +resource "google_project_service" "bq_project_api_service" { + for_each = toset([ + "bigquery.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api_bq" { + depends_on = [google_project_service.bq_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + + +# Create autokey handle for BQ dataset +resource "google_kms_key_handle" "bq_key_handle" { + provider = google-beta + project = module.autokey.resource_project_id + name = "bq-auto-key-handle" + location = "us-central1" + resource_type_selector = "bigquery.googleapis.com/Dataset" + depends_on = [ + module.autokey, + google_project_service.bq_project_api_service + ] +} + + + +# Create dataset in bigquery protected by autokey +resource "google_bigquery_dataset" "dataset" { + dataset_id = "dataset_${module.autokey.random_id}" + location = "us-central1" + project = module.autokey.resource_project_id + delete_contents_on_destroy = true + default_encryption_configuration { + kms_key_name = google_kms_key_handle.bq_key_handle.kms_key + } + + depends_on = [ + time_sleep.wait_enable_service_api_bq, + ] +} + + + + + +# Create table in bigquery +resource "google_bigquery_table" "clear_table" { + dataset_id = google_bigquery_dataset.dataset.dataset_id + project = module.autokey.resource_project_id + table_id = "clear-data" + description = "This table contain clear dummy text sensitive data" + deletion_protection = false + depends_on = [google_bigquery_dataset.dataset] +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/compute.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/compute.tf new file mode 100644 index 0000000..07a864d --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/compute.tf @@ -0,0 +1,68 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + +# Enable the necessary API service +resource "google_project_service" "compute_project_api_service" { + for_each = toset([ + "compute.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling API +resource "time_sleep" "wait_enable_service_api_compute" { + depends_on = [google_project_service.compute_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + +# Create autokey handle for compute disk +resource "google_kms_key_handle" "disk_key_handle" { + provider = google-beta + project = module.autokey.resource_project_id + name = "disk-auto-key-handle" + location = "us-west1" + resource_type_selector = "compute.googleapis.com/Disk" + depends_on = [ + module.autokey, + google_project_service.compute_project_api_service + ] +} + + +# Create compute disk protected by autokey +resource "google_compute_disk" "persistant_disk" { + project = module.autokey.resource_project_id + name = "persistant-disk" + type = "pd-ssd" + zone = "us-west1-a" + size = 30 + physical_block_size_bytes = 4096 + disk_encryption_key { + kms_key_self_link = google_kms_key_handle.disk_key_handle.kms_key + } + depends_on = [time_sleep.wait_enable_service_api_compute] +} + diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/main.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/main.tf new file mode 100644 index 0000000..03498e7 --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/main.tf @@ -0,0 +1,43 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + + +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" ## update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] +} + diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/outputs.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/outputs.tf new file mode 100644 index 0000000..f647977 --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/outputs.tf @@ -0,0 +1,32 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +/* +output "autokey_config" { + description = "autokey_config" + + value = module.autokey.autokey_config +} + +output "my_key_handle" { + description = "my_key_handle" + + value = module.autokey.my_key_handle +} +*/ \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/storage.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/storage.tf new file mode 100644 index 0000000..671ffbb --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/storage.tf @@ -0,0 +1,39 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +# Create autokey handle for storage bucket +resource "google_kms_key_handle" "gcs_key_handle" { + provider = google-beta + project = module.autokey.resource_project_id + name = "gcs-auto-key-handle" + location = "us-east1" + resource_type_selector = "storage.googleapis.com/Bucket" + depends_on = [module.autokey] +} + + +# Create storage bucket protected by autokey +resource "google_storage_bucket" "simple_bucket_name" { + name = "simple_bucket_${module.autokey.random_id}" + location = "us-east1" + force_destroy = true + project = module.autokey.resource_project_id + uniform_bucket_level_access = true + encryption { + default_kms_key_name = google_kms_key_handle.gcs_key_handle.kms_key + } +} diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/variables.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/variables.tf new file mode 100644 index 0000000..ed19868 --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/variables.tf @@ -0,0 +1,21 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + diff --git a/v0.2/terraform-google-autokey/examples/cloud_autokms_example/versions.tf b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/versions.tf new file mode 100644 index 0000000..a31ff2d --- /dev/null +++ b/v0.2/terraform-google-autokey/examples/cloud_autokms_example/versions.tf @@ -0,0 +1,33 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 4.0" + } + google-beta = { + source = "hashicorp/google-beta" + } + } + required_version = ">= 0.13" +} diff --git a/v0.2/terraform-google-autokey/main.tf b/v0.2/terraform-google-autokey/main.tf new file mode 100644 index 0000000..04b827d --- /dev/null +++ b/v0.2/terraform-google-autokey/main.tf @@ -0,0 +1,170 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +resource "random_id" "random_suffix" { + byte_length = 4 +} + + +locals { + # project ID for autokey key project + autokey_key_project_id = var.create_new_autokey_key_project ? "${var.autokey_key_project_name}-${random_id.random_suffix.hex}" : var.autokey_key_project_id + autokey_key_project_number = data.google_project.key_project.number + + # project ID for resource project + resource_project_id = var.create_new_resource_project ? "${var.resource_project_name}-${random_id.random_suffix.hex}" : var.resource_project_id + resource_project_number = data.google_project.resource_project.number +} + + +data "google_project" "key_project" { + project_id = local.autokey_key_project_id + depends_on = [google_project.key_project] +} + + +data "google_project" "resource_project" { + project_id = local.resource_project_id + depends_on = [google_project.resource_project] +} + + + + + +# Create Folder in GCP Organization +resource "google_folder" "autokey_folder" { + count = var.create_new_folder ? 1 : 0 + display_name = "${var.autokey_folder_name}-${random_id.random_suffix.hex}" + # parent = "organizations/${var.organization_id}" + parent = var.parent_is_folder ? "folders/${var.parent_folder_id}" : "organizations/${var.organization_id}" +} + + +# Create the project +resource "google_project" "key_project" { + count = var.create_new_autokey_key_project ? 1 : 0 + billing_account = var.billing_account + + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.folder_id}" + name = var.autokey_key_project_name + project_id = local.autokey_key_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +# Create the project +resource "google_project" "resource_project" { + count = var.create_new_resource_project ? 1 : 0 + billing_account = var.billing_account + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.folder_id}" + name = var.resource_project_name + project_id = local.resource_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +#Set permissions for key admins to use Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_admin" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.folder_id}" + role = "roles/cloudkms.autokeyAdmin" + members = var.autokey_folder_admins +} + +#Set permissions for users to protect resources with Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_users" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.folder_id}" + role = "roles/cloudkms.autokeyUser" + members = var.autokey_folder_users +} + +#Set permissions for key admins to use Autokey in this project +resource "google_project_iam_binding" "autokey_project_admin" { + count = 1 + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + members = var.autokey_project_kms_admins + depends_on = [google_project.key_project] +} + + + +# Enable the necessary API services +resource "google_project_service" "autokey_api_service" { + for_each = toset([ + "cloudkms.googleapis.com", + ]) + + service = each.key + project = local.autokey_key_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [google_project.key_project] + +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api" { + depends_on = [google_project_service.autokey_api_service] + create_duration = "30s" + destroy_duration = "15s" +} + + +#Create KMS Service Agent +resource "google_project_service_identity" "KMS_Service_Agent" { + provider = google-beta + service = "cloudkms.googleapis.com" + project = local.autokey_key_project_id + depends_on = [time_sleep.wait_enable_service_api] +} + + + +#Grant the KMS Service Agent the Cloud KMS Admin role +resource "google_project_iam_member" "autokey_project_admin" { + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + member = "serviceAccount:service-${local.autokey_key_project_number}@gcp-sa-cloudkms.iam.gserviceaccount.com" + depends_on = [google_project_service_identity.KMS_Service_Agent] +} + +# Wait delay kms service account IAM permissions +resource "time_sleep" "wait_srv_acc_priv" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_project_iam_member.autokey_project_admin] +} + +resource "google_kms_autokey_config" "autokey_config" { + count = 1 + provider = google-beta + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].folder_id : "${var.folder_id}" + key_project = "projects/${local.autokey_key_project_number}" + depends_on = [time_sleep.wait_srv_acc_priv] +} + + +# Wait delay for autokey config rollout +resource "time_sleep" "wait_autokey_config" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_kms_autokey_config.autokey_config] +} + + diff --git a/v0.2/terraform-google-autokey/outputs.tf b/v0.2/terraform-google-autokey/outputs.tf new file mode 100644 index 0000000..fe38fe9 --- /dev/null +++ b/v0.2/terraform-google-autokey/outputs.tf @@ -0,0 +1,36 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +output "autokey_config" { + description = "KMS Autokey config" + value = google_kms_autokey_config.autokey_config +} + + +output "key_project_id" { + description = "key_project_id" + value = data.google_project.key_project.project_id +} + +output "resource_project_id" { + description = "resource_project_id" + value = data.google_project.resource_project.project_id +} + + +output "random_id" { + description = "random id" + value = random_id.random_suffix.hex +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/test/integration/discover_test.go b/v0.2/terraform-google-autokey/test/integration/discover_test.go new file mode 100644 index 0000000..349a396 --- /dev/null +++ b/v0.2/terraform-google-autokey/test/integration/discover_test.go @@ -0,0 +1,25 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package test + +import ( + "testing" + + "github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test/pkg/tft" +) + +func TestAll(t *testing.T) { + tft.AutoDiscoverAndTest(t) +} diff --git a/v0.2/terraform-google-autokey/test/integration/go.mod b/v0.2/terraform-google-autokey/test/integration/go.mod new file mode 100644 index 0000000..ce82874 --- /dev/null +++ b/v0.2/terraform-google-autokey/test/integration/go.mod @@ -0,0 +1,82 @@ +module github.com/terraform-google-modules/cloud-ids/test/integration + +go 1.21 + +toolchain go1.21.9 + +require github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 + +require ( + cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/storage v1.33.0 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/alexflint/go-filemutex v1.3.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/aws/aws-sdk-go v1.45.5 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/go-errors/errors v1.5.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/gruntwork-io/terratest v0.46.13 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f // indirect + github.com/hashicorp/hcl/v2 v2.18.0 // indirect + github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 // indirect + github.com/hashicorp/terraform-json v0.17.1 // indirect + github.com/jinzhu/copier v0.4.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-zglob v0.0.4 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/tidwall/gjson v1.17.1 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/tmccombs/hcl2json v0.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zclconf/go-cty v1.14.0 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.138.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.58.3 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/v0.2/terraform-google-autokey/test/integration/go.sum b/v0.2/terraform-google-autokey/test/integration/go.sum new file mode 100644 index 0000000..9272e9e --- /dev/null +++ b/v0.2/terraform-google-autokey/test/integration/go.sum @@ -0,0 +1,1018 @@ +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.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.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +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/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +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= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= +cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 h1:db17HvmQPwTAq7/ex/w2DiNMA4oGUmTiHvScfPW/cRI= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0/go.mod h1:JSsaDg/h4yaiNNTNnrCjyL6/czHb/Oz/z+dzWVqJYBE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alexflint/go-filemutex v1.3.0 h1:LgE+nTUWnQCyRKbpoceKZsPQbs84LivvgwUymZXdOcM= +github.com/alexflint/go-filemutex v1.3.0/go.mod h1:U0+VA/i30mGBlLCrFPGtTe9y6wGQfNAWPBTekHQ+c8A= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.45.5 h1:bxilnhv9FngUgdPNJmOIv2bk+2sP0dpqX3e4olhWcGM= +github.com/aws/aws-sdk-go v1.45.5/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +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-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +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/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.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= +github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +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/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +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.3/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/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +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.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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 h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +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.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gruntwork-io/terratest v0.46.13 h1:FDaEoZ7DtkomV8pcwLdBV/VsytdjnPRqJkIriYEYwjs= +github.com/gruntwork-io/terratest v0.46.13/go.mod h1:8sxu3Qup8TxtbzOHzq0MUrQffJj/G61/OwlsReaCwpo= +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/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-getter v1.7.2 h1:uJDtyXwEfalmp1PqdxuhZqrNkUyClZAhVeZYTArbqkg= +github.com/hashicorp/go-getter v1.7.2/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws= +github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= +github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 h1:nZ5gGjbe5o7XUu1d7j+Y5Ztcxlp+yaumTKH9i0D3wlg= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72/go.mod h1:l8HcFPm9cQh6Q0KSWoYPiePqMvRFenybP1CH2MjKdlg= +github.com/hashicorp/terraform-json v0.17.1 h1:eMfvh/uWggKmY7Pmb3T85u86E2EQg6EQHgyRwf3RkyA= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +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/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/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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= +github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= +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.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 h1:drhDO54gdT/a15GBcMRmunZiNcLgPiFIJa23KzmcvcU= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770/go.mod h1:SO/iHr6q2EzbqRApt+8/E9wqebTwQn5y+UlB04bxzo0= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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.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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= +github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tmccombs/hcl2json v0.6.0 h1:Qc5NL4NQbpNnw8w8HQcA3GsVHvQDJXJwVTUxf2AEhOs= +github.com/tmccombs/hcl2json v0.6.0/go.mod h1:QNirG4H64ZvlFsy9werRxXlWNTDR1GhWzXkjqPILHwo= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= +github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +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.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +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= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +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/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/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/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.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-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-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-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/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-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/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.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +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-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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/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-20190606165138-5da285871e9c/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-20191001151750-bb3f8db39f24/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-20200113162924-86b910548bc1/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-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +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/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-20190606124116-d0a3d012864b/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-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-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-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.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.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.138.0 h1:K/tVp05MxNVbHShRw9m7e9VJGdagNeTdMzqPH7AUqr0= +google.golang.org/api v0.138.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY= +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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +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-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-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +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.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.31.1/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.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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.8/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.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/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +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/kustomize/kyaml v0.17.0 h1:G2bWs03V9Ur2PinHLzTUJ8Ded+30SzXZKiO92SRDs3c= +sigs.k8s.io/kustomize/kyaml v0.17.0/go.mod h1:6lxkYF1Cv9Ic8g/N7I86cvxNc5iinUo/P2vKsHNmpyE= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/v0.2/terraform-google-autokey/test/setup/README.md b/v0.2/terraform-google-autokey/test/setup/README.md new file mode 100644 index 0000000..a73f9bf --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/README.md @@ -0,0 +1,112 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://cloud.google.com/kms/docs/autokey-overview). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + source = "GoogleCloudPlatform/terraform-google-autokey" + #source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] +} + +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| autokey\_folder\_admins | List the users who should have the authority to enable and configure Autokey at a folder level | `list(string)` | n/a | yes | +| autokey\_folder\_name | Resource folders should use KMS Autokey | `string` | `"autokey folder"` | no | +| autokey\_folder\_users | List the users who should have the authority to protect their resources with Autokey | `list(string)` | n/a | yes | +| autokey\_key\_project\_id | Project name to deploy resources | `string` | `null` | no | +| autokey\_key\_project\_name | Project name to deploy resources | `string` | `"autokey-project"` | no | +| autokey\_project\_kms\_admins | List the users who should have the authority to manage crypto operations in the Key Management Project | `list(string)` | n/a | yes | +| billing\_account | billing account required | `string` | n/a | yes | +| create\_new\_autokey\_key\_project | If true, the Terraform will create a new project for autokey key. If false, will use an existing project | `bool` | `true` | no | +| create\_new\_folder | If true, the Terraform will create a new folder. If false, will use an existing folder | `bool` | `true` | no | +| create\_new\_resource\_project | If true, the Terraform will create a new project for resources. If false, will use an existing project | `bool` | `true` | no | +| folder\_id | Resource folders should use KMS Autokey | `string` | `null` | no | +| organization\_id | Organization ID to add tags at Org level | `string` | n/a | yes | +| parent\_folder\_id | Folder ID to create child folder for autokey | `string` | n/a | yes | +| parent\_is\_folder | Folder ID to create child folder for autokey | `bool` | `true` | no | +| resource\_project\_id | Project id to deploy resources | `string` | `null` | no | +| resource\_project\_name | Project name to deploy resources | `string` | `"resource-project"` | no | +| skip\_delete | If true, the Terraform resource can be deleted without deleting the Project via the Google API. | `string` | `"false"` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| autokey\_config | KMS Autokey config | +| key\_project\_id | key\_project\_id | +| random\_id | random id | +| resource\_project\_id | resource\_project\_id | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/test/setup/iam.tf b/v0.2/terraform-google-autokey/test/setup/iam.tf new file mode 100644 index 0000000..a66f9bc --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/iam.tf @@ -0,0 +1,44 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + int_required_roles = [ + "roles/compute.admin", + "roles/iam.serviceAccountAdmin", + "roles/iam.serviceAccountUser", + "roles/ids.admin", + "roles/logging.viewer", + "roles/servicenetworking.networksAdmin", + ] +} + +resource "google_service_account" "int_test" { + project = module.project.project_id + account_id = "ci-account" + display_name = "ci-account" +} + +resource "google_project_iam_member" "int_test" { + for_each = toset(local.int_required_roles) + + project = module.project.project_id + role = each.value + member = "serviceAccount:${google_service_account.int_test.email}" +} + +resource "google_service_account_key" "int_test" { + service_account_id = google_service_account.int_test.id +} diff --git a/v0.2/terraform-google-autokey/test/setup/main.tf b/v0.2/terraform-google-autokey/test/setup/main.tf new file mode 100644 index 0000000..cefcfc1 --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/main.tf @@ -0,0 +1,35 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "project" { + source = "terraform-google-modules/project-factory/google" + version = "~> 14.0" + + name = "ci-cloud-ids" + random_project_id = "true" + org_id = var.org_id + folder_id = var.folder_id + billing_account = var.billing_account + + activate_apis = [ + "cloudresourcemanager.googleapis.com", + "iam.googleapis.com", + "ids.googleapis.com", + "storage-api.googleapis.com", + "servicenetworking.googleapis.com", + "serviceusage.googleapis.com", + ] +} diff --git a/v0.2/terraform-google-autokey/test/setup/outputs.tf b/v0.2/terraform-google-autokey/test/setup/outputs.tf new file mode 100644 index 0000000..357bb1e --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/outputs.tf @@ -0,0 +1,24 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "project_id" { + value = module.project.project_id +} + +output "sa_key" { + value = google_service_account_key.int_test.private_key + sensitive = true +} diff --git a/v0.2/terraform-google-autokey/test/setup/variables.tf b/v0.2/terraform-google-autokey/test/setup/variables.tf new file mode 100644 index 0000000..6d80b89 --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/variables.tf @@ -0,0 +1,26 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +variable "org_id" { + description = "The numeric organization id" +} + +variable "folder_id" { + description = "The folder to deploy in" +} + +variable "billing_account" { + description = "The billing account id associated with the project, e.g. XXXXXX-YYYYYY-ZZZZZZ" +} diff --git a/v0.2/terraform-google-autokey/test/setup/versions.tf b/v0.2/terraform-google-autokey/test/setup/versions.tf new file mode 100644 index 0000000..470b015 --- /dev/null +++ b/v0.2/terraform-google-autokey/test/setup/versions.tf @@ -0,0 +1,29 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.25.0" + } + google-beta = { + source = "hashicorp/google-beta" + version = ">= 3.25.0" + } + } +} diff --git a/v0.2/terraform-google-autokey/v0.1/CHANGELOG.md b/v0.2/terraform-google-autokey/v0.1/CHANGELOG.md new file mode 100644 index 0000000..140c365 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on +[Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to +[Semantic Versioning](https://semver.org/spec/v2.0.0.html). +This changelog is generated automatically based on [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). + +## [0.2.0](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/compare/v0.1.0...v0.2.0) (2023-12-20) + + +### Features + +* added threat exception attribute and updated README ([#15](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/15)) ([feaddda](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/feaddda839e54dbd511476b2a82221819bd55f06)) + + +### Bug Fixes + +* **deps:** Update Terraform google to v5 ([#21](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/21)) ([c7e2ac1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/c7e2ac10b229382b842edcf7ed4db260ecc65b98)) + +## 0.1.0 (2023-05-03) + + +### Bug Fixes + +* formatting fixes ([#1](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/1)) ([3ffba20](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/3ffba20ea27356467cd23d7b676a7b5b6694e9b9)) +* release-please config ([#2](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/issues/2)) ([29a438f](https://github.com/GoogleCloudPlatform/terraform-google-cloud-ids/commit/29a438f063ea0fa86c16fe8bd0f14a3d4cfda189)) + +## [0.1.0](https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0) - 20XX-YY-ZZ + +### Features + +- Initial release + +[0.1.0]: https://github.com/terraform-google-modules/terraform-google-cloud-ids/releases/tag/v0.1.0 diff --git a/v0.2/terraform-google-autokey/v0.1/CODEOWNERS b/v0.2/terraform-google-autokey/v0.1/CODEOWNERS new file mode 100644 index 0000000..e100848 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/CODEOWNERS @@ -0,0 +1,12 @@ +# NOTE: This file is automatically generated from values at: +# https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit/blob/master/infra/terraform/test-org/org/locals.tf + +* @GoogleCloudPlatform/blueprint-solutions @mgaur10 + +# NOTE: GitHub CODEOWNERS locations: +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-and-branch-protection + +CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +.github/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions +docs/CODEOWNERS @GoogleCloudPlatform/blueprint-solutions + diff --git a/v0.2/terraform-google-autokey/v0.1/CONTRIBUTING.md b/v0.2/terraform-google-autokey/v0.1/CONTRIBUTING.md new file mode 100644 index 0000000..fc745e9 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/CONTRIBUTING.md @@ -0,0 +1,131 @@ +# Contributing + +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement (CLA). You (or your employer) retain the copyright to your +contribution; this simply gives us permission to use and redistribute your +contributions as part of the project. Head over to + to see your current agreements on file or +to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code Reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. + +## Development + +The following dependencies must be installed on the development system: + +- [Docker Engine][docker-engine] +- [Google Cloud SDK][google-cloud-sdk] +- [make] + +### Generating Documentation for Inputs and Outputs + +The Inputs and Outputs tables in the READMEs of the root module, +submodules, and example modules are automatically generated based on +the `variables` and `outputs` of the respective modules. These tables +must be refreshed if the module interfaces are changed. + +#### Execution + +Run `make generate_docs` to generate new Inputs and Outputs tables. + +### Integration Testing + +Integration tests are used to verify the behaviour of the root module, +submodules, and example modules. Additions, changes, and fixes should +be accompanied with tests. + +The integration tests are run using [Kitchen][kitchen], +[Kitchen-Terraform][kitchen-terraform], and [InSpec][inspec]. These +tools are packaged within a Docker image for convenience. + +The general strategy for these tests is to verify the behaviour of the +[example modules](./examples/), thus ensuring that the root module, +submodules, and example modules are all functionally correct. + +#### Test Environment +The easiest way to test the module is in an isolated test project. The setup for such a project is defined in [test/setup](./test/setup/) directory. + +To use this setup, you need a service account with these permissions (on a Folder or Organization): +- Project Creator +- Project Billing Manager + +The project that the service account belongs to must have the following APIs enabled (the setup won't +create any resources on the service account's project): +- Cloud Resource Manager +- Cloud Billing +- Service Usage +- Identity and Access Management (IAM) + +Export the Service Account credentials to your environment like so: + +``` +export SERVICE_ACCOUNT_JSON=$(< credentials.json) +``` + +You will also need to set a few environment variables: +``` +export TF_VAR_org_id="your_org_id" +export TF_VAR_folder_id="your_folder_id" +export TF_VAR_billing_account="your_billing_account_id" +``` + +With these settings in place, you can prepare a test project using Docker: +``` +make docker_test_prepare +``` + +#### Noninteractive Execution + +Run `make docker_test_integration` to test all of the example modules +noninteractively, using the prepared test project. + +#### Interactive Execution + +1. Run `make docker_run` to start the testing Docker container in + interactive mode. + +1. Run `kitchen_do create ` to initialize the working + directory for an example module. + +1. Run `kitchen_do converge ` to apply the example module. + +1. Run `kitchen_do verify ` to test the example module. + +1. Run `kitchen_do destroy ` to destroy the example module + state. + +### Linting and Formatting + +Many of the files in the repository can be linted or formatted to +maintain a standard of quality. + +#### Execution + +Run `make docker_test_lint`. + +[docker-engine]: https://www.docker.com/products/docker-engine +[flake8]: http://flake8.pycqa.org/en/latest/ +[gofmt]: https://golang.org/cmd/gofmt/ +[google-cloud-sdk]: https://cloud.google.com/sdk/install +[hadolint]: https://github.com/hadolint/hadolint +[inspec]: https://inspec.io/ +[kitchen-terraform]: https://github.com/newcontext-oss/kitchen-terraform +[kitchen]: https://kitchen.ci/ +[make]: https://en.wikipedia.org/wiki/Make_(software) +[shellcheck]: https://www.shellcheck.net/ +[terraform-docs]: https://github.com/segmentio/terraform-docs +[terraform]: https://terraform.io/ diff --git a/v0.2/terraform-google-autokey/v0.1/LICENSE b/v0.2/terraform-google-autokey/v0.1/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/v0.2/terraform-google-autokey/v0.1/Makefile b/v0.2/terraform-google-autokey/v0.1/Makefile new file mode 100644 index 0000000..2f5ae41 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/Makefile @@ -0,0 +1,86 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Please note that this file was generated from [terraform-google-module-template](https://github.com/terraform-google-modules/terraform-google-module-template). +# Please make sure to contribute relevant changes upstream! + +# Make will use bash instead of sh +SHELL := /usr/bin/env bash + +DOCKER_TAG_VERSION_DEVELOPER_TOOLS := 1 +DOCKER_IMAGE_DEVELOPER_TOOLS := cft/developer-tools +REGISTRY_URL := gcr.io/cloud-foundation-cicd + +# Enter docker container for local development +.PHONY: docker_run +docker_run: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash + +# Execute prepare tests within the docker container +.PHONY: docker_test_prepare +docker_test_prepare: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh prepare_environment + +# Clean up test environment within the docker container +.PHONY: docker_test_cleanup +docker_test_cleanup: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -e TF_VAR_org_id \ + -e TF_VAR_folder_id \ + -e TF_VAR_billing_account \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/execute_with_credentials.sh cleanup_environment + +# Execute integration tests within the docker container +.PHONY: docker_test_integration +docker_test_integration: + docker run --rm -it \ + -e SERVICE_ACCOUNT_JSON \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_integration.sh + +# Execute lint tests within the docker container +.PHONY: docker_test_lint +docker_test_lint: + docker run --rm -it \ + -e EXCLUDE_LINT_DIRS \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /usr/local/bin/test_lint.sh + +# Generate documentation +.PHONY: docker_generate_docs +docker_generate_docs: + docker run --rm -it \ + -v "$(CURDIR)":/workspace \ + $(REGISTRY_URL)/${DOCKER_IMAGE_DEVELOPER_TOOLS}:${DOCKER_TAG_VERSION_DEVELOPER_TOOLS} \ + /bin/bash -c 'source /usr/local/bin/task_helper_functions.sh && generate_docs' + +# Alias for backwards compatibility +.PHONY: generate_docs +generate_docs: docker_generate_docs diff --git a/v0.2/terraform-google-autokey/v0.1/README.md b/v0.2/terraform-google-autokey/v0.1/README.md new file mode 100644 index 0000000..2763509 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/README.md @@ -0,0 +1,115 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://LINK-TO-BE-UPDATED). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + source = "GoogleCloudPlatform/terraform-google-autokey" + #source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| autokey\_folder\_admins | List the users who should have the authority to enable and configure Autokey at a folder level | `list(string)` | n/a | yes | +| autokey\_folder\_name | Resource folders should use KMS Autokey | `string` | `"autokey folder"` | no | +| autokey\_folder\_users | List the users who should have the authority to protect their resources with Autokey | `list(string)` | n/a | yes | +| autokey\_key\_project\_id | Project name to deploy resources | `string` | `null` | no | +| autokey\_key\_project\_name | Project name to deploy resources | `string` | `"autokey-project"` | no | +| autokey\_project\_kms\_admins | List the users who should have the authority to manage crypto operations in the Key Management Project | `list(string)` | n/a | yes | +| billing\_account | billing account required | `string` | n/a | yes | +| create\_new\_autokey\_key\_project | If true, the Terraform will create a new project for autokey key. If false, will use an existing project | `bool` | `true` | no | +| create\_new\_folder | If true, the Terraform will create a new folder. If false, will use an existing folder | `bool` | `true` | no | +| create\_new\_resource\_project | If true, the Terraform will create a new project for resources. If false, will use an existing project | `bool` | `true` | no | +| folder\_id | Resource folders should use KMS Autokey | `string` | `null` | no | +| organization\_id | Organization ID to add tags at Org level | `string` | n/a | yes | +| parent\_folder\_id | Folder ID to create child folder for autokey | `string` | n/a | yes | +| parent\_is\_folder | Folder ID to create child folder for autokey | `bool` | `true` | no | +| region | Network region for resources | `string` | n/a | yes | +| resource\_project\_id | Project id to deploy resources | `string` | `null` | no | +| resource\_project\_name | Project name to deploy resources | `string` | `"resource-project"` | no | +| skip\_delete | If true, the Terraform resource can be deleted without deleting the Project via the Google API. | `string` | `"false"` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| autokey\_config | KMS Autokey config | +| key\_project\_id | key\_project\_id | +| random\_id | random id | +| region | resources region | +| resource\_project\_id | resource\_project\_id | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/v0.1/SECURITY.md b/v0.2/terraform-google-autokey/v0.1/SECURITY.md new file mode 100644 index 0000000..ce1f393 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/SECURITY.md @@ -0,0 +1,4 @@ +To report a security issue, please use http://g.co/vulnz. We use +http://g.co/vulnz for our intake, and do coordination and disclosure here on +GitHub (including using GitHub Security Advisory). The Google Security Team will +respond within 5 working days of your report on g.co/vulnz. diff --git a/v0.2/terraform-google-autokey/v0.1/assets/icon.png b/v0.2/terraform-google-autokey/v0.1/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..66eb109b4434f6ecd41b68519165345aa309e35d GIT binary patch literal 3738 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 LBUFWkZTNoyp;##U literal 0 HcmV?d00001 diff --git a/v0.2/terraform-google-autokey/v0.1/build/int.cloudbuild.yaml b/v0.2/terraform-google-autokey/v0.1/build/int.cloudbuild.yaml new file mode 100644 index 0000000..f22fa35 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/build/int.cloudbuild.yaml @@ -0,0 +1,44 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +timeout: 3600s +steps: +- id: swap-module-refs + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['module-swapper'] +- id: prepare + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'source /usr/local/bin/task_helper_functions.sh && prepare_environment'] + env: + - 'TF_VAR_org_id=$_ORG_ID' + - 'TF_VAR_folder_id=$_FOLDER_ID' + - 'TF_VAR_billing_account=$_BILLING_ACCOUNT' +- id: cloud-ids-example-init + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage init --verbose'] +- id: cloud-ids-example-apply + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage apply --verbose'] +- id: cloud-ids-example-verify + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage verify --verbose'] +- id: cloud-ids-example-teardown + name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + args: ['/bin/bash', '-c', 'cft test run TestAll/examples/cloud_ids_example --stage teardown --verbose'] +tags: +- 'ci' +- 'integration' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.2/terraform-google-autokey/v0.1/build/lint.cloudbuild.yaml b/v0.2/terraform-google-autokey/v0.1/build/lint.cloudbuild.yaml new file mode 100644 index 0000000..f287b56 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/build/lint.cloudbuild.yaml @@ -0,0 +1,24 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +steps: +- name: 'gcr.io/cloud-foundation-cicd/$_DOCKER_IMAGE_DEVELOPER_TOOLS:$_DOCKER_TAG_VERSION_DEVELOPER_TOOLS' + id: 'lint' + args: ['/usr/local/bin/test_lint.sh'] +tags: +- 'ci' +- 'lint' +substitutions: + _DOCKER_IMAGE_DEVELOPER_TOOLS: 'cft/developer-tools' + _DOCKER_TAG_VERSION_DEVELOPER_TOOLS: '1' diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/README.md b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/README.md new file mode 100644 index 0000000..f6e8d5c --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/README.md @@ -0,0 +1,90 @@ +# Cloud Auto KMS Terraform Module +Autokey simplifies creating and managing customer encryption keys (CMEK) by automating provisioning and assignment. With Autokey, your key rings, keys, and service accounts do not need to be pre-planned and provisioned. Instead, they are generated on demand as part of resource creation. This module makes it easy to set up [Auto KMS](https://LINK-TO-BE-UPDATED). + +How to set up KMS Autokey: +- Choose an existing folder or create a new resource folder. You will be creating resource projects in this folder. All of the resources created in these projects can use Autokey. +- Choose the parent for the resource folder, either it can be root of the organization or any existing folder +- Enable Cloud KMS API in the Autokey project. +- Create and assign the Autokey service agent. +- Associate the Autokey folder with the Key project, through an Autokey configuration setting. +- The Auto key is ready to be used in resource projects. + +## Usage + +```tf +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" # update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + +``` + + +## Inputs + +No inputs. + +## Outputs + +No outputs. + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account and User Permissions + +A service account with the following roles must be used to provision +the resources of this module: + +- KMS Service Agent : `roles/cloudkms.admin` +- Key admins to use Autokey at folder level: `roles/cloudkms.autokeyAdmin` +- key admins to use Autokey in this project: `roles/cloudkms.admin` +- Users to protect resources with Autokey: `roles/cloudkms.autokeyUser` + + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud KMS API: `cloudkms.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/architecture-diagram.png b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/architecture-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dca0f56e3ca771afdb0be8f3e599e1d052619f98 GIT binary patch literal 64521 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 z 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 V??Z$T-Hf<;Jk?wFMX+ag=Z11_k0>UtmF;fP7 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⪚lz5&B;j0+%IXAb*c@r zyz}Tw#mZR10~wwR&#K1fC zRc`jrvb*mFpC9}})`gX+hibVA#+xUtjCsmcUE3gfxwbpHHe}AP1+7Uxhig?>YPdXh zs|_D|)AvH!U25FrrM+j`y1cxZ@M^1+x#XSUS7m7}gEk!x+9oVUzMm{971Q&ys%%as zl_quZRCUUK&CpxRP~`tvu5+aKTqW}t*~_~mJ|mmIt*UF0dg3pF9jhFzj>rtspq1^m zUM;og|9r(87X>&JQpE(;|G+y0dke7ZOz%xE{I{8x189C=F)I28%zxt?Boc@UFNc&W z{!gH(sK*)24%Fg?Ln*RiQzlr`!=w&b?Hi@=n<$s#nfM7#lzTN6y zr1=fz0D1x;k=WU&!T)J~c^1eQwj?(E7vO0Vgn&%Q#d8I}&+z|;3~xT7 YAuUfcus+YyrvP4BxAkrntJ#G7A1ek-vj6}9 literal 0 HcmV?d00001 diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/bq.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/bq.tf new file mode 100644 index 0000000..2d12f52 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/bq.tf @@ -0,0 +1,85 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + +# Enable the necessary API service +resource "google_project_service" "bq_project_api_service" { + for_each = toset([ + "bigquery.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api_bq" { + depends_on = [google_project_service.bq_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + + +# Create autokey handle for BQ dataset +resource "google_kms_key_handle" "bq_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "bq-auto-key-handle" + location = module.autokey.region + resource_type_selector = "bigquery.googleapis.com/Dataset" + depends_on = [ + module.autokey, + google_project_service.bq_project_api_service + ] +} + + + +# Create dataset in bigquery protected by autokey +resource "google_bigquery_dataset" "dataset" { + dataset_id = "dataset_${module.autokey.random_id}" + location = module.autokey.region + project = module.autokey.resource_project_id + delete_contents_on_destroy = true + default_encryption_configuration { + kms_key_name = google_kms_key_handle.bq_key_handle.kms_key + } + + depends_on = [ + time_sleep.wait_enable_service_api_bq, + ] +} + + + + + +# Create table in bigquery +resource "google_bigquery_table" "clear_table" { + dataset_id = google_bigquery_dataset.dataset.dataset_id + project = module.autokey.resource_project_id + table_id = "clear-data" + description = "This table contain clear dummy text sensitive data" + deletion_protection = false + depends_on = [google_bigquery_dataset.dataset] +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/compute.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/compute.tf new file mode 100644 index 0000000..606ca9e --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/compute.tf @@ -0,0 +1,68 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + +# Enable the necessary API service +resource "google_project_service" "compute_project_api_service" { + for_each = toset([ + "compute.googleapis.com", + ]) + + service = each.key + project = module.autokey.resource_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [module.autokey] +} + + +# Wait delay after enabling API +resource "time_sleep" "wait_enable_service_api_compute" { + depends_on = [google_project_service.compute_project_api_service] + create_duration = "15s" + # destroy_duration = "15s" +} + +# Create autokey handle for compute disk +resource "google_kms_key_handle" "disk_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "disk-auto-key-handle" + location = module.autokey.region + resource_type_selector = "compute.googleapis.com/Disk" + depends_on = [ + module.autokey, + google_project_service.compute_project_api_service + ] +} + + +# Create compute disk protected by autokey +resource "google_compute_disk" "persistant_disk" { + project = module.autokey.resource_project_id + name = "persistant-disk" + type = "pd-ssd" + zone = "us-central1-a" + size = 30 + physical_block_size_bytes = 4096 + disk_encryption_key { + kms_key_self_link = google_kms_key_handle.disk_key_handle.kms_key + } + depends_on = [time_sleep.wait_enable_service_api_compute] +} + diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/main.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/main.tf new file mode 100644 index 0000000..d90106e --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/main.tf @@ -0,0 +1,44 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + + + + +# Configure Cloud KMS Autokey +module "autokey" { + # source = "GoogleCloudPlatform/autokey/google" + source = "../../" + billing_account = "" + organization_id = "" + parent_folder_id = "" ## update folder_id + parent_is_folder = false ## set to 'false' to use org as parent + create_new_folder = true ## set to false to use existing folder + folder_id = "" ## provide folder_id if using existing folder + autokey_folder_name = "autokey folder" ## applicable only if creating new folder, otherwise declare null + create_new_autokey_key_project = true ## set to false to use existing project + autokey_key_project_name = "autokey-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + autokey_key_project_id = "" ## update if using existing project + create_new_resource_project = true ## update to 'false' to use an existing project + resource_project_name = "resource-project" ## must be 6 to 30 letters, digits, hyphens and start with a letter.; applicable only if creating new folder, otherwise declare null + resource_project_id = "" ## update project_id if using existing project + autokey_folder_admins = ["user:foo@example.com"] ## List the users who should have the authority to enable and configure Autokey at a folder level; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_folder_users = ["user:user:bar@example.com"] ## List the users who should have the authority to protect their resources with Autokey; example user listing ["user:foo@example.com", "user:bar@example.com"] + autokey_project_kms_admins = ["user:user:bar@example.com"] ## List the users who should have the authority to manage crypto operations in the Key Management Project; example user listing ["user:foo@example.com", "user:bar@example.com"] + region = "us-central1" +} + diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/outputs.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/outputs.tf new file mode 100644 index 0000000..f647977 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/outputs.tf @@ -0,0 +1,32 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +/* +output "autokey_config" { + description = "autokey_config" + + value = module.autokey.autokey_config +} + +output "my_key_handle" { + description = "my_key_handle" + + value = module.autokey.my_key_handle +} +*/ \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/storage.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/storage.tf new file mode 100644 index 0000000..18f4ed6 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/storage.tf @@ -0,0 +1,39 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +# Create autokey handle for storage bucket +resource "google_kms_key_handle" "gcs_key_handle" { + provider = google-private + project = module.autokey.resource_project_id + name = "gcs-auto-key-handle" + location = module.autokey.region + resource_type_selector = "storage.googleapis.com/Bucket" + depends_on = [module.autokey] +} + + +# Create storage bucket protected by autokey +resource "google_storage_bucket" "simple_bucket_name" { + name = "simple_bucket_${module.autokey.random_id}" + location = module.autokey.region + force_destroy = true + project = module.autokey.resource_project_id + uniform_bucket_level_access = true + encryption { + default_kms_key_name = google_kms_key_handle.gcs_key_handle.kms_key + } +} diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/variables.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/variables.tf new file mode 100644 index 0000000..ed19868 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/variables.tf @@ -0,0 +1,21 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + + diff --git a/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/versions.tf b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/versions.tf new file mode 100644 index 0000000..442151b --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/examples/cloud_autokms_example/versions.tf @@ -0,0 +1,40 @@ +/** + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +## This code creates PoC example for KMS Autokey ## +## It is not developed for production workload ## + +/* +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 4.0" + } + } + required_version = ">= 0.13" +} */ + +terraform { + required_providers { + google-private = { + source = "google.com/providers/google-private" + version = "0.0.1844" + } + } +} + diff --git a/v0.2/terraform-google-autokey/v0.1/main.tf b/v0.2/terraform-google-autokey/v0.1/main.tf new file mode 100644 index 0000000..21a6a01 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/main.tf @@ -0,0 +1,170 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +resource "random_id" "random_suffix" { + byte_length = 4 +} + + +locals { + # project ID for autokey key project + autokey_key_project_id = var.create_new_autokey_key_project ? "${var.autokey_key_project_name}-${random_id.random_suffix.hex}" : var.autokey_key_project_id + autokey_key_project_number = data.google_project.key_project.number + + # project ID for resource project + resource_project_id = var.create_new_resource_project ? "${var.resource_project_name}-${random_id.random_suffix.hex}" : var.resource_project_id + resource_project_number = data.google_project.resource_project.number +} + + +data "google_project" "key_project" { + project_id = local.autokey_key_project_id + depends_on = [google_project.key_project] +} + + +data "google_project" "resource_project" { + project_id = local.resource_project_id + depends_on = [google_project.resource_project] +} + + + + + +# Create Folder in GCP Organization +resource "google_folder" "autokey_folder" { + count = var.create_new_folder ? 1 : 0 + display_name = "${var.autokey_folder_name}-${random_id.random_suffix.hex}" + # parent = "organizations/${var.organization_id}" + parent = var.parent_is_folder ? "folders/${var.parent_folder_id}" : "organizations/${var.organization_id}" +} + + +# Create the project +resource "google_project" "key_project" { + count = var.create_new_autokey_key_project ? 1 : 0 + billing_account = var.billing_account + + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + name = var.autokey_key_project_name + project_id = local.autokey_key_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +# Create the project +resource "google_project" "resource_project" { + count = var.create_new_resource_project ? 1 : 0 + billing_account = var.billing_account + folder_id = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + name = var.resource_project_name + project_id = local.resource_project_id + skip_delete = var.skip_delete + depends_on = [google_folder.autokey_folder] +} + +#Set permissions for key admins to use Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_admin" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + role = "roles/cloudkms.autokeyAdmin" + members = var.autokey_folder_admins +} + +#Set permissions for users to protect resources with Autokey in this folder +resource "google_folder_iam_binding" "autokey_folder_users" { + count = 1 + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].name : "folders/${var.parent_folder_id}" + role = "roles/cloudkms.autokeyUser" + members = var.autokey_folder_users +} + +#Set permissions for key admins to use Autokey in this project +resource "google_project_iam_binding" "autokey_project_admin" { + count = 1 + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + members = var.autokey_project_kms_admins + depends_on = [google_project.key_project] +} + + + +# Enable the necessary API services +resource "google_project_service" "autokey_api_service" { + for_each = toset([ + "cloudkms.googleapis.com", + ]) + + service = each.key + project = local.autokey_key_project_id + disable_on_destroy = false + disable_dependent_services = true + depends_on = [google_project.key_project] + +} + + +# Wait delay after enabling APIs +resource "time_sleep" "wait_enable_service_api" { + depends_on = [google_project_service.autokey_api_service] + create_duration = "30s" + destroy_duration = "15s" +} + + +#Create KMS Service Agent +resource "google_project_service_identity" "KMS_Service_Agent" { + provider = google-beta + service = "cloudkms.googleapis.com" + project = local.autokey_key_project_id + depends_on = [time_sleep.wait_enable_service_api] +} + + + +#Grant the KMS Service Agent the Cloud KMS Admin role +resource "google_project_iam_member" "autokey_project_admin" { + project = local.autokey_key_project_id + role = "roles/cloudkms.admin" + member = "serviceAccount:service-${local.autokey_key_project_number}@gcp-sa-cloudkms.iam.gserviceaccount.com" + depends_on = [google_project_service_identity.KMS_Service_Agent] +} + +# Wait delay kms service account IAM permissions +resource "time_sleep" "wait_srv_acc_priv" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_project_iam_member.autokey_project_admin] +} + +resource "google_kms_autokey_config" "autokey_config" { + count = 1 + provider = google-private + folder = var.create_new_folder ? google_folder.autokey_folder[count.index].folder_id : "${var.parent_folder_id}" + key_project = "projects/${local.autokey_key_project_number}" + depends_on = [time_sleep.wait_srv_acc_priv] +} + + +# Wait delay for autokey config rollout +resource "time_sleep" "wait_autokey_config" { + create_duration = "15s" + # destroy_duration = "15s" + depends_on = [google_kms_autokey_config.autokey_config] +} + + diff --git a/v0.2/terraform-google-autokey/v0.1/outputs.tf b/v0.2/terraform-google-autokey/v0.1/outputs.tf new file mode 100644 index 0000000..b54edab --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/outputs.tf @@ -0,0 +1,40 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +output "autokey_config" { + description = "KMS Autokey config" + value = google_kms_autokey_config.autokey_config +} + + +output "key_project_id" { + description = "key_project_id" + value = data.google_project.key_project.project_id +} + +output "resource_project_id" { + description = "resource_project_id" + value = data.google_project.resource_project.project_id +} + +output "region" { + description = "resources region " + value = var.region +} + +output "random_id" { + description = "random id" + value = random_id.random_suffix.hex +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/v0.1/test/integration/discover_test.go b/v0.2/terraform-google-autokey/v0.1/test/integration/discover_test.go new file mode 100644 index 0000000..349a396 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/integration/discover_test.go @@ -0,0 +1,25 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package test + +import ( + "testing" + + "github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test/pkg/tft" +) + +func TestAll(t *testing.T) { + tft.AutoDiscoverAndTest(t) +} diff --git a/v0.2/terraform-google-autokey/v0.1/test/integration/go.mod b/v0.2/terraform-google-autokey/v0.1/test/integration/go.mod new file mode 100644 index 0000000..ce82874 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/integration/go.mod @@ -0,0 +1,82 @@ +module github.com/terraform-google-modules/cloud-ids/test/integration + +go 1.21 + +toolchain go1.21.9 + +require github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 + +require ( + cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/storage v1.33.0 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/alexflint/go-filemutex v1.3.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/aws/aws-sdk-go v1.45.5 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/go-errors/errors v1.5.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/gruntwork-io/terratest v0.46.13 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f // indirect + github.com/hashicorp/hcl/v2 v2.18.0 // indirect + github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 // indirect + github.com/hashicorp/terraform-json v0.17.1 // indirect + github.com/jinzhu/copier v0.4.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-zglob v0.0.4 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/tidwall/gjson v1.17.1 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/tmccombs/hcl2json v0.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/zclconf/go-cty v1.14.0 // indirect + go.opencensus.io v0.24.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.138.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.58.3 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/v0.2/terraform-google-autokey/v0.1/test/integration/go.sum b/v0.2/terraform-google-autokey/v0.1/test/integration/go.sum new file mode 100644 index 0000000..9272e9e --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/integration/go.sum @@ -0,0 +1,1018 @@ +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.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.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +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/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +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= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= +cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0 h1:db17HvmQPwTAq7/ex/w2DiNMA4oGUmTiHvScfPW/cRI= +github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test v0.14.0/go.mod h1:JSsaDg/h4yaiNNTNnrCjyL6/czHb/Oz/z+dzWVqJYBE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alexflint/go-filemutex v1.3.0 h1:LgE+nTUWnQCyRKbpoceKZsPQbs84LivvgwUymZXdOcM= +github.com/alexflint/go-filemutex v1.3.0/go.mod h1:U0+VA/i30mGBlLCrFPGtTe9y6wGQfNAWPBTekHQ+c8A= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.45.5 h1:bxilnhv9FngUgdPNJmOIv2bk+2sP0dpqX3e4olhWcGM= +github.com/aws/aws-sdk-go v1.45.5/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +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-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +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/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.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= +github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +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/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +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.3/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/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +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.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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 h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +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.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gruntwork-io/terratest v0.46.13 h1:FDaEoZ7DtkomV8pcwLdBV/VsytdjnPRqJkIriYEYwjs= +github.com/gruntwork-io/terratest v0.46.13/go.mod h1:8sxu3Qup8TxtbzOHzq0MUrQffJj/G61/OwlsReaCwpo= +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/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-getter v1.7.2 h1:uJDtyXwEfalmp1PqdxuhZqrNkUyClZAhVeZYTArbqkg= +github.com/hashicorp/go-getter v1.7.2/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws= +github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= +github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72 h1:nZ5gGjbe5o7XUu1d7j+Y5Ztcxlp+yaumTKH9i0D3wlg= +github.com/hashicorp/terraform-config-inspect v0.0.0-20231204233900-a34142ec2a72/go.mod h1:l8HcFPm9cQh6Q0KSWoYPiePqMvRFenybP1CH2MjKdlg= +github.com/hashicorp/terraform-json v0.17.1 h1:eMfvh/uWggKmY7Pmb3T85u86E2EQg6EQHgyRwf3RkyA= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +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/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/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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-zglob v0.0.4 h1:LQi2iOm0/fGgu80AioIJ/1j9w9Oh+9DZ39J4VAGzHQM= +github.com/mattn/go-zglob v0.0.4/go.mod h1:MxxjyoXXnMxfIpxTK2GAkw1w8glPsQILx3N5wrKakiY= +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.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770 h1:drhDO54gdT/a15GBcMRmunZiNcLgPiFIJa23KzmcvcU= +github.com/mitchellh/go-testing-interface v1.14.2-0.20210821155943-2d9075ca8770/go.mod h1:SO/iHr6q2EzbqRApt+8/E9wqebTwQn5y+UlB04bxzo0= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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.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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= +github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tmccombs/hcl2json v0.6.0 h1:Qc5NL4NQbpNnw8w8HQcA3GsVHvQDJXJwVTUxf2AEhOs= +github.com/tmccombs/hcl2json v0.6.0/go.mod h1:QNirG4H64ZvlFsy9werRxXlWNTDR1GhWzXkjqPILHwo= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= +github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +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.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +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= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +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/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/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/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.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-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-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-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/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-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/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-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/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.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +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-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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/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-20190606165138-5da285871e9c/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-20191001151750-bb3f8db39f24/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-20200113162924-86b910548bc1/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-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +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/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-20190606124116-d0a3d012864b/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-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-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-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.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.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.138.0 h1:K/tVp05MxNVbHShRw9m7e9VJGdagNeTdMzqPH7AUqr0= +google.golang.org/api v0.138.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY= +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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +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-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-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +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.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +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.31.1/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.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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.8/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.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/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +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/kustomize/kyaml v0.17.0 h1:G2bWs03V9Ur2PinHLzTUJ8Ded+30SzXZKiO92SRDs3c= +sigs.k8s.io/kustomize/kyaml v0.17.0/go.mod h1:6lxkYF1Cv9Ic8g/N7I86cvxNc5iinUo/P2vKsHNmpyE= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/README.md b/v0.2/terraform-google-autokey/v0.1/test/setup/README.md new file mode 100644 index 0000000..cf554da --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/README.md @@ -0,0 +1,97 @@ +# Cloud IDS Terraform Module +This module makes it easy to setup [Cloud IDS](https://cloud.google.com/ids), set up [private services access](https://cloud.google.com/vpc/docs/private-services-access) and a [packet mirroring policy](https://cloud.google.com/vpc/docs/using-packet-mirroring). + +The packet mirroring policy requires at least one of the three below options: +- [Tags](#pre_configured_rules): Up to 5 asset tags can be specified. +- [Subnets](#security_rules): Up to 5 subnets can be specified. +- [Instances](#custom_rules): Up to 50 instance can be specified. + +## Usage + +```tf +module cloud_ids { + source = "GoogleCloudPlatform/terraform-google-cloud-ids" + + project_id = "" + vpc_network_name = "" + network_region = "" + network_zone = "" + instance_list = [ + "projects//zones//instances/", + "projects//zones//instances/", + ] + subnet_list = [ + "projects//regions//subnetworks/", + "projects//regions//subnetworks/", + ] + tag_list = ["", "", "", ""] + ids_private_ip_range_name = "ids-private-address" + ids_private_ip_address = "10.10.10.0" + ids_private_ip_prefix_length = 24 + ids_private_ip_description = "Cloud IDS reserved IP Range" + ids_name = "cloud-ids" + severity = "INFORMATIONAL" + packet_mirroring_policy_name = "cloud-ids-packet-mirroring" + packet_mirroring_policy_description = "Packet mirroring policy for Cloud IDS" +} +``` + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| billing\_account | The billing account id associated with the project, e.g. XXXXXX-YYYYYY-ZZZZZZ | `any` | n/a | yes | +| folder\_id | The folder to deploy in | `any` | n/a | yes | +| org\_id | The numeric organization id | `any` | n/a | yes | + +## Outputs + +| Name | Description | +|------|-------------| +| project\_id | n/a | +| sa\_key | n/a | + + + +## Requirements + +These sections describe requirements for using this module. + +### Software + +The following dependencies must be available: + +- [Terraform][terraform] v1.3 +- [Terraform Provider for GCP][terraform-provider-gcp] plugin v3.53 + +### Service Account + +A service account with the following roles must be used to provision +the resources of this module: + +- Cloud IDS Admin: `roles/ids.admin` +- Compute Packet Mirroring User: `roles/compute.packetMirroringUser` +- Logs Viewer: `roles/logging.viewer` + +The [Project Factory module][project-factory-module] and the +[IAM module][iam-module] may be used in combination to provision a +service account with the necessary roles applied. + +### APIs + +A project with the following APIs enabled must be used to host the +resources of this module: + +- Cloud IDS API: `ids.googleapis.com` +- Cloud Logging API: `logging.googleapis.com` +- Compute Engine API: `compute.googleapis.com` +- Service Networking API: `servicenetworking.googleapis.com` + +The [Project Factory module][project-factory-module] can be used to +provision a project with the necessary APIs enabled. + +## Contributing + +Refer to the [contribution guidelines](./CONTRIBUTING.md) for +information on contributing to this module. diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/iam.tf b/v0.2/terraform-google-autokey/v0.1/test/setup/iam.tf new file mode 100644 index 0000000..a66f9bc --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/iam.tf @@ -0,0 +1,44 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + int_required_roles = [ + "roles/compute.admin", + "roles/iam.serviceAccountAdmin", + "roles/iam.serviceAccountUser", + "roles/ids.admin", + "roles/logging.viewer", + "roles/servicenetworking.networksAdmin", + ] +} + +resource "google_service_account" "int_test" { + project = module.project.project_id + account_id = "ci-account" + display_name = "ci-account" +} + +resource "google_project_iam_member" "int_test" { + for_each = toset(local.int_required_roles) + + project = module.project.project_id + role = each.value + member = "serviceAccount:${google_service_account.int_test.email}" +} + +resource "google_service_account_key" "int_test" { + service_account_id = google_service_account.int_test.id +} diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/main.tf b/v0.2/terraform-google-autokey/v0.1/test/setup/main.tf new file mode 100644 index 0000000..cefcfc1 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/main.tf @@ -0,0 +1,35 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "project" { + source = "terraform-google-modules/project-factory/google" + version = "~> 14.0" + + name = "ci-cloud-ids" + random_project_id = "true" + org_id = var.org_id + folder_id = var.folder_id + billing_account = var.billing_account + + activate_apis = [ + "cloudresourcemanager.googleapis.com", + "iam.googleapis.com", + "ids.googleapis.com", + "storage-api.googleapis.com", + "servicenetworking.googleapis.com", + "serviceusage.googleapis.com", + ] +} diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/outputs.tf b/v0.2/terraform-google-autokey/v0.1/test/setup/outputs.tf new file mode 100644 index 0000000..357bb1e --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/outputs.tf @@ -0,0 +1,24 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "project_id" { + value = module.project.project_id +} + +output "sa_key" { + value = google_service_account_key.int_test.private_key + sensitive = true +} diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/variables.tf b/v0.2/terraform-google-autokey/v0.1/test/setup/variables.tf new file mode 100644 index 0000000..6d80b89 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/variables.tf @@ -0,0 +1,26 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +variable "org_id" { + description = "The numeric organization id" +} + +variable "folder_id" { + description = "The folder to deploy in" +} + +variable "billing_account" { + description = "The billing account id associated with the project, e.g. XXXXXX-YYYYYY-ZZZZZZ" +} diff --git a/v0.2/terraform-google-autokey/v0.1/test/setup/versions.tf b/v0.2/terraform-google-autokey/v0.1/test/setup/versions.tf new file mode 100644 index 0000000..470b015 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/test/setup/versions.tf @@ -0,0 +1,29 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.25.0" + } + google-beta = { + source = "hashicorp/google-beta" + version = ">= 3.25.0" + } + } +} diff --git a/v0.2/terraform-google-autokey/v0.1/variables.tf b/v0.2/terraform-google-autokey/v0.1/variables.tf new file mode 100644 index 0000000..997946f --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/variables.tf @@ -0,0 +1,125 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +variable "billing_account" { + type = string + description = "billing account required" +} + + +variable "organization_id" { + type = string + description = "Organization ID to add tags at Org level" +} + +variable "parent_folder_id" { + description = "Folder ID to create child folder for autokey" + type = string +} + +variable "parent_is_folder" { + description = "Folder ID to create child folder for autokey" + type = bool + default = true ## false to use org_id as parent for autokey resources +} + + + +variable "create_new_folder" { + description = " If true, the Terraform will create a new folder. If false, will use an existing folder" + type = bool + default = true ## update to 'false' to use an existing folder +} + +variable "folder_id" { + type = string + description = "Resource folders should use KMS Autokey" + default = null +} + +variable "autokey_folder_name" { + type = string + description = "Resource folders should use KMS Autokey" + default = "autokey folder" ## applicable only if creating new folder +} + +variable "create_new_autokey_key_project" { + description = " If true, the Terraform will create a new project for autokey key. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "autokey_key_project_name" { + type = string + description = "Project name to deploy resources" + default = "autokey-project" # no spaces only aalowed to have characters, numbers and special characters +} + +variable "autokey_key_project_id" { + type = string + description = "Project name to deploy resources" + default = null +} + +variable "create_new_resource_project" { + description = " If true, the Terraform will create a new project for resources. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "resource_project_name" { + type = string + description = "Project name to deploy resources" + default = "resource-project" # no spaces only aalowed to have characters, numbers and special characters + +} + +variable "resource_project_id" { + type = string + description = "Project id to deploy resources" + default = null +} + + +variable "skip_delete" { + description = " If true, the Terraform resource can be deleted without deleting the Project via the Google API." + default = "false" +} + + + +variable "autokey_folder_admins" { + type = list(string) + description = "List the users who should have the authority to enable and configure Autokey at a folder level" +} + + +variable "autokey_folder_users" { + type = list(string) + description = "List the users who should have the authority to protect their resources with Autokey" +} + + +variable "autokey_project_kms_admins" { + type = list(string) + description = "List the users who should have the authority to manage crypto operations in the Key Management Project" +} + + +variable "region" { + type = string + description = "Network region for resources" +} + diff --git a/v0.2/terraform-google-autokey/v0.1/versions.tf b/v0.2/terraform-google-autokey/v0.1/versions.tf new file mode 100644 index 0000000..97704c3 --- /dev/null +++ b/v0.2/terraform-google-autokey/v0.1/versions.tf @@ -0,0 +1,42 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +/* +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.53, < 6" + } + } + + provider_meta "google" { + module_name = "blueprints/terraform/cloud-ids/v0.2.0" + } +} +*/ + +terraform { + required_providers { + google-private = { + source = "google.com/providers/google-private" + version = "0.0.1844" + } + } +} +provider "google-private" { + project = local.autokey_key_project_id + region = var.region + # USER_PROJECT_OVERRIDE=true +} \ No newline at end of file diff --git a/v0.2/terraform-google-autokey/variables.tf b/v0.2/terraform-google-autokey/variables.tf new file mode 100644 index 0000000..8b6da7f --- /dev/null +++ b/v0.2/terraform-google-autokey/variables.tf @@ -0,0 +1,118 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + + +variable "billing_account" { + type = string + description = "billing account required" +} + + +variable "organization_id" { + type = string + description = "Organization ID to add tags at Org level" +} + +variable "parent_folder_id" { + description = "Folder ID to create child folder for autokey" + type = string +} + +variable "parent_is_folder" { + description = "Folder ID to create child folder for autokey" + type = bool + default = true ## false to use org_id as parent for autokey resources +} + + + +variable "create_new_folder" { + description = " If true, the Terraform will create a new folder. If false, will use an existing folder" + type = bool + default = true ## update to 'false' to use an existing folder +} + +variable "folder_id" { + type = string + description = "Resource folders should use KMS Autokey" + default = null +} + +variable "autokey_folder_name" { + type = string + description = "Resource folders should use KMS Autokey" + default = "autokey folder" ## applicable only if creating new folder +} + +variable "create_new_autokey_key_project" { + description = " If true, the Terraform will create a new project for autokey key. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "autokey_key_project_name" { + type = string + description = "Project name to deploy resources" + default = "autokey-project" # no spaces only aalowed to have characters, numbers and special characters +} + +variable "autokey_key_project_id" { + type = string + description = "Project name to deploy resources" + default = null +} + +variable "create_new_resource_project" { + description = " If true, the Terraform will create a new project for resources. If false, will use an existing project" + type = bool + default = true ## update to 'false' to use an existing project +} + +variable "resource_project_name" { + type = string + description = "Project name to deploy resources" + default = "resource-project" # no spaces only aalowed to have characters, numbers and special characters + +} + +variable "resource_project_id" { + type = string + description = "Project id to deploy resources" + default = null +} + + +variable "skip_delete" { + description = " If true, the Terraform resource can be deleted without deleting the Project via the Google API." + default = "false" +} + + + +variable "autokey_folder_admins" { + type = list(string) + description = "List the users who should have the authority to enable and configure Autokey at a folder level" +} + + +variable "autokey_folder_users" { + type = list(string) + description = "List the users who should have the authority to protect their resources with Autokey" +} + + +variable "autokey_project_kms_admins" { + type = list(string) + description = "List the users who should have the authority to manage crypto operations in the Key Management Project" +} diff --git a/v0.2/terraform-google-autokey/versions.tf b/v0.2/terraform-google-autokey/versions.tf new file mode 100644 index 0000000..84a56aa --- /dev/null +++ b/v0.2/terraform-google-autokey/versions.tf @@ -0,0 +1,31 @@ +## Copyright 2023 Google LLC +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## https://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. + +terraform { + required_version = ">= 0.13" + required_providers { + google = { + source = "hashicorp/google" + version = ">= 3.53, < 6" + } + google-beta = { + source = "hashicorp/google-beta" + } + } + + provider_meta "google" { + module_name = "GoogleCloudPlatform/terraform-google-autokey" + } +} +