[
  {
    "path": ".github/CODEOWNERS",
    "content": "# Use this file to define individuals or teams that are responsible for code in a repository.\n# Read more: <https://help.github.com/articles/about-codeowners/>\n#\n# Order is important: the last matching pattern has the highest precedence\n\n# These owners will be the default owners for everything\n*             @cloudposse/engineering @cloudposse/contributors\n\n# Cloud Posse must review any changes to Makefiles\n**/Makefile   @cloudposse/engineering\n**/Makefile.* @cloudposse/engineering\n\n# Cloud Posse must review any changes to GitHub actions\n.github/*     @cloudposse/engineering\n\n# Cloud Posse must review any changes to standard context definition,\n# but some changes can be rubber-stamped.\n**/*.tf       @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers\nREADME.yaml   @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers\nREADME.md     @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers\ndocs/*.md     @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers\n\n# Cloud Posse Admins must review all changes to CODEOWNERS or the mergify configuration\n.github/mergify.yml @cloudposse/admins\n.github/CODEOWNERS  @cloudposse/admins\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: 'bug'\nassignees: ''\n\n---\n\nFound a bug? Maybe our [Slack Community](https://slack.cloudposse.com) can help. \n\n[![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)\n\n## Describe the Bug\nA clear and concise description of what the bug is.\n\n## Expected Behavior\nA clear and concise description of what you expected to happen.\n\n## Steps to Reproduce\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Run '....'\n3. Enter '....'\n4. See error\n\n## Screenshots\nIf applicable, add screenshots or logs to help explain your problem.\n\n## Environment (please complete the following information):\n\nAnything that will help us triage the bug will help. Here are some ideas:\n - OS: [e.g. Linux, OSX, WSL, etc]\n - Version [e.g. 10.15]\n\n## Additional Context\nAdd any other context about the problem here."
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "---\nname: Bug report\ndescription: Create a report to help us improve\nlabels: [\"bug\"]\nassignees: [\"\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Found a bug?\n        \n        Please checkout our [Slack Community](https://slack.cloudposse.com)\n        or visit our [Slack Archive](https://archive.sweetops.com/).\n\n        [![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)\n\n  - type: textarea\n    id: concise-description\n    attributes:\n      label: Describe the Bug\n      description: A clear and concise description of what the bug is.\n      placeholder: What is the bug about?\n    validations:\n      required: true\n\n  - type: textarea\n    id: expected\n    attributes:\n      label: Expected Behavior\n      description: A clear and concise description of what you expected.\n      placeholder: What happened?\n    validations:\n      required: true\n\n  - type: textarea\n    id: reproduction-steps\n    attributes:\n      label: Steps to Reproduce\n      description: Steps to reproduce the behavior.\n      placeholder: How do we reproduce it?\n    validations:\n      required: true\n\n  - type: textarea\n    id: screenshots\n    attributes:\n      label: Screenshots\n      description: If applicable, add screenshots or logs to help explain.\n    validations:\n      required: false\n\n  - type: textarea\n    id: environment\n    attributes:\n      label: Environment\n      description: Anything that will help us triage the bug.\n      placeholder: |\n        - OS: [e.g. Linux, OSX, WSL, etc]\n        - Version [e.g. 10.15]\n        - Module version\n        - Terraform version\n    validations:\n      required: false\n\n  - type: textarea\n    id: additional\n    attributes:\n      label: Additional Context\n      description: |\n        Add any other context about the problem here.\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n\ncontact_links:\n\n  - name: Community Slack Team\n    url: https://cloudposse.com/slack/\n    about: |-\n      Please ask and answer questions here.\n\n  - name: Office Hours\n    url: https://cloudposse.com/office-hours/\n    about: |-\n      Join us every Wednesday for FREE Office Hours (lunch & learn).\n\n  - name: DevOps Accelerator Program\n    url: https://cloudposse.com/accelerate/\n    about: |-\n      Own your infrastructure in record time. We build it. You drive it. \n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature Request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: 'feature request'\nassignees: ''\n\n---\n\nHave a question? Please checkout our [Slack Community](https://slack.cloudposse.com) or visit our [Slack Archive](https://archive.sweetops.com/). \n\n[![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)\n\n## Describe the Feature\n\nA clear and concise description of what the bug is. \n\n## Expected Behavior\n\nA clear and concise description of what you expected to happen.\n\n## Use Case\n\nIs your feature request related to a problem/challenge you are trying to solve? Please provide some additional context of why this feature or capability will be valuable.\n\n## Describe Ideal Solution\n\nA clear and concise description of what you want to happen. If you don't know, that's okay.\n\n## Alternatives Considered\n\nExplain what alternative solutions or features you've considered.\n\n## Additional Context\n\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "---\nname: Feature Request\ndescription: Suggest an idea for this project\nlabels: [\"feature request\"]\nassignees: [\"\"]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Have a question?\n        \n        Please checkout our [Slack Community](https://slack.cloudposse.com)\n        or visit our [Slack Archive](https://archive.sweetops.com/).\n\n        [![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com)\n\n  - type: textarea\n    id: concise-description\n    attributes:\n      label: Describe the Feature\n      description: A clear and concise description of what the feature is.\n      placeholder: What is the feature about?\n    validations:\n      required: true\n\n  - type: textarea\n    id: expected\n    attributes:\n      label: Expected Behavior\n      description: A clear and concise description of what you expected.\n      placeholder: What happened?\n    validations:\n      required: true\n\n  - type: textarea\n    id: use-case\n    attributes:\n      label: Use Case\n      description: |\n        Is your feature request related to a problem/challenge you are trying\n        to solve?\n        \n        Please provide some additional context of why this feature or\n        capability will be valuable.\n    validations:\n      required: true\n\n  - type: textarea\n    id: ideal-solution\n    attributes:\n      label: Describe Ideal Solution\n      description: A clear and concise description of what you want to happen.\n    validations:\n      required: true\n\n  - type: textarea\n    id: alternatives-considered\n    attributes:\n      label: Alternatives Considered\n      description: Explain alternative solutions or features considered.\n    validations:\n      required: false\n\n  - type: textarea\n    id: additional\n    attributes:\n      label: Additional Context\n      description: |\n        Add any other context about the problem here.\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "content": ""
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "## what\n\n<!--\n- Describe high-level what changed as a result of these commits (i.e. in plain-english, what do these changes mean?)\n- Use bullet points to be concise and to the point.\n-->\n\n## why\n\n<!--\n- Provide the justifications for the changes (e.g. business case). \n- Describe why these changes were made (e.g. why do these commits fix the problem?)\n- Use bullet points to be concise and to the point.\n-->\n\n## references\n\n<!--\n- Link to any supporting github issues or helpful documentation to add some context (e.g. stackoverflow). \n- Use `closes #123`, if this PR closes a GitHub issue `#123`\n-->\n"
  },
  {
    "path": ".github/mergify.yml",
    "content": "extends: .github\n"
  },
  {
    "path": ".github/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\",\n    \":preserveSemverRanges\",\n    \":rebaseStalePrs\"\n  ],\n  \"baseBranches\": [\"main\"],\n  \"labels\": [\"auto-update\"],\n  \"dependencyDashboardAutoclose\": true,\n  \"enabledManagers\": [\"terraform\"],\n  \"terraform\": {\n    \"ignorePaths\": [\"**/context.tf\"]\n  }\n}\n"
  },
  {
    "path": ".github/settings.yml",
    "content": "# Upstream changes from _extends are only recognized when modifications are made to this file in the default branch.\n_extends: .github\nrepository:\n  name: terraform-aws-rds-cluster\n  description: Terraform module to provision an RDS Aurora cluster for MySQL or Postgres\n  homepage: https://cloudposse.com/accelerate\n  topics: terraform, terraform-modules, rds, rds-database, aurora, aws, mysql, cluster, hcl2, terratest\n\n\n\n"
  },
  {
    "path": ".github/workflows/branch.yml",
    "content": "---\nname: Branch\non:\n  pull_request:\n    branches:\n      - main\n      - release/**\n    types: [opened, synchronize, reopened, labeled, unlabeled]\n  push:\n    branches:\n      - main\n      - release/v*\n    paths-ignore:\n      - '.github/**'\n      - 'docs/**'\n      - 'examples/**'\n      - 'test/**'\n      - 'README.md'\n\npermissions: {}\n\njobs:\n  terraform-module:\n    uses: cloudposse/.github/.github/workflows/shared-terraform-module.yml@main\n    secrets: inherit\n"
  },
  {
    "path": ".github/workflows/chatops.yml",
    "content": "---\nname: chatops\non:\n  issue_comment:\n    types: [created]\n\npermissions:\n  pull-requests: write\n  id-token: write\n  contents: write\n  statuses: write\n\njobs:\n  test:\n    uses: cloudposse/.github/.github/workflows/shared-terraform-chatops.yml@main\n    if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '/terratest') }}\n    secrets: inherit\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "---\nname: release\non:\n  release:\n    types:\n      - published\n\npermissions:\n  id-token: write\n  contents: write\n  pull-requests: write\n\njobs:\n  terraform-module:\n    uses: cloudposse/.github/.github/workflows/shared-release-branches.yml@main\n    secrets: inherit\n"
  },
  {
    "path": ".github/workflows/scheduled.yml",
    "content": "---\nname: scheduled\non:\n  workflow_dispatch: { }  # Allows manually trigger this workflow\n  schedule:\n    - cron: \"0 3 * * *\"\n\npermissions:\n  pull-requests: write\n  id-token: write\n  contents: write\n\njobs:\n  scheduled:\n    uses: cloudposse/.github/.github/workflows/shared-terraform-scheduled.yml@main\n    secrets: inherit\n"
  },
  {
    "path": ".gitignore",
    "content": "# Compiled files\n*.tfstate\n*.tfstate.backup\n\n# Module directory\n.terraform\n.idea\n*.iml\n\n.build-harness\nbuild-harness\n.terraform.lock.hcl\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2017-2023 Cloud Posse, LLC\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "\n\n<!-- markdownlint-disable -->\n<a href=\"https://cpco.io/homepage\"><img src=\"https://github.com/cloudposse/terraform-aws-rds-cluster/blob/main/.github/banner.png?raw=true\" alt=\"Project Banner\"/></a><br/>\n\n\n<p align=\"right\"><a href=\"https://github.com/cloudposse/terraform-aws-rds-cluster/releases/latest\"><img src=\"https://img.shields.io/github/release/cloudposse/terraform-aws-rds-cluster.svg?style=for-the-badge\" alt=\"Latest Release\"/></a><a href=\"https://github.com/cloudposse/terraform-aws-rds-cluster/commits\"><img src=\"https://img.shields.io/github/last-commit/cloudposse/terraform-aws-rds-cluster.svg?style=for-the-badge\" alt=\"Last Updated\"/></a><a href=\"https://cloudposse.com/slack\"><img src=\"https://slack.cloudposse.com/for-the-badge.svg\" alt=\"Slack Community\"/></a><a href=\"https://cloudposse.com/support/\"><img src=\"https://img.shields.io/badge/Get_Support-success.svg?style=for-the-badge\" alt=\"Get Support\"/></a>\n\n</p>\n<!-- markdownlint-restore -->\n\n<!--\n\n\n\n\n  ** DO NOT EDIT THIS FILE\n  **\n  ** This file was automatically generated by the `cloudposse/build-harness`.\n  ** 1) Make all changes to `README.yaml`\n  ** 2) Install [atmos](https://atmos.tools/install/) (you only need to do this once)\n  ** 3) Run`atmos readme` to rebuild this file.\n  **\n  ** (We maintain HUNDREDS of open source projects. This is how we maintain our sanity.)\n  **\n\n\n\n\n\n-->\n\nTerraform module to provision an [`RDS Aurora`](https://aws.amazon.com/rds/aurora) cluster for MySQL or Postgres.\n\nSupports [Amazon Aurora Serverless](https://aws.amazon.com/rds/aurora/serverless/).\n\n\n> [!TIP]\n> #### 👽 Use Atmos with Terraform\n> Cloud Posse uses [`atmos`](https://atmos.tools) to easily orchestrate multiple environments using Terraform. <br/>\n> Works with [Github Actions](https://atmos.tools/integrations/github-actions/), [Atlantis](https://atmos.tools/integrations/atlantis), or [Spacelift](https://atmos.tools/integrations/spacelift).\n>\n> <details>\n> <summary><strong>Watch demo of using Atmos with Terraform</strong></summary>\n> <img src=\"https://github.com/cloudposse/atmos/blob/main/docs/demo.gif?raw=true\"/><br/>\n> <i>Example of running <a href=\"https://atmos.tools\"><code>atmos</code></a> to manage infrastructure from our <a href=\"https://atmos.tools/quick-start/\">Quick Start</a> tutorial.</i>\n> </detalis>\n\n\n\n\n\n## Usage\n\n\nFor a complete example, see [examples/complete](examples/complete).\n\nFor automated tests of the complete example using [bats](https://github.com/bats-core/bats-core) and [Terratest](https://github.com/gruntwork-io/terratest) (which tests and deploys the example on AWS), see [test](test).\n\n[Basic example](examples/basic)\n\n```hcl\nmodule \"rds_cluster_aurora_postgres\" {\n  source = \"cloudposse/rds-cluster/aws\"\n  # Cloud Posse recommends pinning every module to a specific version\n  # version     = \"x.x.x\"\n\n  name            = \"postgres\"\n  engine          = \"aurora-postgresql\"\n  cluster_family  = \"aurora-postgresql9.6\"\n  # 1 writer, 1 reader\n  cluster_size    = 2\n  # 1 writer, 3 reader\n  # cluster_size    = 4\n  # 1 writer, 5 reader\n  # cluster_size    = 6\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  db_port         = 5432\n  instance_type   = \"db.r4.large\"\n  vpc_id          = \"vpc-xxxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n}\n```\n\n\n[Serverless Aurora MySQL 5.6](examples/serverless_mysql)\n\n```hcl\nmodule \"rds_cluster_aurora_mysql_serverless\" {\n  source = \"cloudposse/rds-cluster/aws\"\n  # Cloud Posse recommends pinning every module to a specific version\n  # version     = \"x.x.x\"\n  namespace            = \"eg\"\n  stage                = \"dev\"\n  name                 = \"db\"\n  engine               = \"aurora\"\n  engine_mode          = \"serverless\"\n  cluster_family       = \"aurora5.6\"\n  cluster_size         = 0\n  admin_user           = \"admin1\"\n  admin_password       = \"Test123456789\"\n  db_name              = \"dbname\"\n  db_port              = 3306\n  instance_type        = \"db.t2.small\"\n  vpc_id               = \"vpc-xxxxxxxx\"\n  security_groups      = [\"sg-xxxxxxxx\"]\n  subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id              = \"Zxxxxxxxx\"\n  enable_http_endpoint = true\n\n  scaling_configuration = [\n    {\n      auto_pause               = true\n      max_capacity             = 256\n      min_capacity             = 2\n      seconds_until_auto_pause = 300\n    }\n  ]\n}\n```\n\n[Serverless Aurora 2.07.1 MySQL 5.7](examples/serverless_mysql57)\n\n```hcl\nmodule \"rds_cluster_aurora_mysql_serverless\" {\n  source = \"cloudposse/rds-cluster/aws\"\n  # Cloud Posse recommends pinning every module to a specific version\n  # version     = \"x.x.x\"\n  namespace            = \"eg\"\n  stage                = \"dev\"\n  name                 = \"db\"\n  engine               = \"aurora-mysql\"\n  engine_mode          = \"serverless\"\n  engine_version       = \"5.7.mysql_aurora.2.07.1\"\n  cluster_family       = \"aurora-mysql5.7\"\n  cluster_size         = 0\n  admin_user           = \"admin1\"\n  admin_password       = \"Test123456789\"\n  db_name              = \"dbname\"\n  db_port              = 3306\n  vpc_id               = \"vpc-xxxxxxxx\"\n  security_groups      = [\"sg-xxxxxxxx\"]\n  subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id              = \"Zxxxxxxxx\"\n  enable_http_endpoint = true\n\n  scaling_configuration = [\n    {\n      auto_pause               = true\n      max_capacity             = 16\n      min_capacity             = 1\n      seconds_until_auto_pause = 300\n      timeout_action           = \"ForceApplyCapacityChange\"\n    }\n  ]\n}\n```\n\n[With cluster parameters](examples/with_cluster_parameters)\n\n```hcl\nmodule \"rds_cluster_aurora_mysql\" {\n  source = \"cloudposse/rds-cluster/aws\"\n  # Cloud Posse recommends pinning every module to a specific version\n  # version     = \"x.x.x\"\n  engine          = \"aurora\"\n  cluster_family  = \"aurora-mysql5.7\"\n  cluster_size    = 2\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  name            = \"db\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  instance_type   = \"db.t2.small\"\n  vpc_id          = \"vpc-xxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n\n  cluster_parameters = [\n    {\n      name  = \"character_set_client\"\n      value = \"utf8\"\n    },\n    {\n      name  = \"character_set_connection\"\n      value = \"utf8\"\n    },\n    {\n      name  = \"character_set_database\"\n      value = \"utf8\"\n    },\n    {\n      name  = \"character_set_results\"\n      value = \"utf8\"\n    },\n    {\n      name  = \"character_set_server\"\n      value = \"utf8\"\n    },\n    {\n      name  = \"collation_connection\"\n      value = \"utf8_bin\"\n    },\n    {\n      name  = \"collation_server\"\n      value = \"utf8_bin\"\n    },\n    {\n      name         = \"lower_case_table_names\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"skip-character-set-client-handshake\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    }\n  ]\n}\n```\n\n[With enhanced monitoring](examples/enhanced_monitoring)\n\n```hcl\n# create IAM role for monitoring\nresource \"aws_iam_role\" \"enhanced_monitoring\" {\n  name               = \"rds-cluster-example-1\"\n  assume_role_policy = data.aws_iam_policy_document.enhanced_monitoring.json\n}\n\n# Attach Amazon's managed policy for RDS enhanced monitoring\nresource \"aws_iam_role_policy_attachment\" \"enhanced_monitoring\" {\n  role       = aws_iam_role.enhanced_monitoring.name\n  policy_arn = \"arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole\"\n}\n\n# allow rds to assume this role\ndata \"aws_iam_policy_document\" \"enhanced_monitoring\" {\n  statement {\n      actions = [\n      \"sts:AssumeRole\",\n    ]\n\n    effect = \"Allow\"\n\n    principals {\n      type        = \"Service\"\n      identifiers = [\"monitoring.rds.amazonaws.com\"]\n    }\n  }\n}\n\nmodule \"rds_cluster_aurora_postgres\" {\n  source = \"cloudposse/rds-cluster/aws\"\n  # Cloud Posse recommends pinning every module to a specific version\n  # version     = \"x.x.x\"\n  engine          = \"aurora-postgresql\"\n  cluster_family  = \"aurora-postgresql9.6\"\n  cluster_size    = 2\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  name            = \"db\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  db_port         = 5432\n  instance_type   = \"db.r4.large\"\n  vpc_id          = \"vpc-xxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n\n  # enable monitoring every 30 seconds\n  rds_monitoring_interval = 30\n\n  # reference iam role created above\n  rds_monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn\n}\n```\n\n> [!IMPORTANT]\n> In Cloud Posse's examples, we avoid pinning modules to specific versions to prevent discrepancies between the documentation\n> and the latest released versions. However, for your own projects, we strongly advise pinning each module to the exact version\n> you're using. This practice ensures the stability of your infrastructure. Additionally, we recommend implementing a systematic\n> approach for updating versions to avoid unexpected changes.\n\n\n\n\n\n## Examples\n\nReview the [complete example](examples/complete) to see how to use this module.\n\n\n\n\n<!-- markdownlint-disable -->\n## Requirements\n\n| Name | Version |\n| ---- | ------- |\n| <a name=\"requirement_terraform\"></a> [terraform](#requirement\\_terraform) | >= 1.0.0 |\n| <a name=\"requirement_aws\"></a> [aws](#requirement\\_aws) | >= 5.81.0 |\n| <a name=\"requirement_null\"></a> [null](#requirement\\_null) | >= 2.0 |\n| <a name=\"requirement_random\"></a> [random](#requirement\\_random) | >= 2.0 |\n\n## Providers\n\n| Name | Version |\n| ---- | ------- |\n| <a name=\"provider_aws\"></a> [aws](#provider\\_aws) | >= 5.81.0 |\n| <a name=\"provider_random\"></a> [random](#provider\\_random) | >= 2.0 |\n\n## Modules\n\n| Name | Source | Version |\n| ---- | ------ | ------- |\n| <a name=\"module_dns_master\"></a> [dns\\_master](#module\\_dns\\_master) | cloudposse/route53-cluster-hostname/aws | 0.13.0 |\n| <a name=\"module_dns_replicas\"></a> [dns\\_replicas](#module\\_dns\\_replicas) | cloudposse/route53-cluster-hostname/aws | 0.13.0 |\n| <a name=\"module_enhanced_monitoring_label\"></a> [enhanced\\_monitoring\\_label](#module\\_enhanced\\_monitoring\\_label) | cloudposse/label/null | 0.25.0 |\n| <a name=\"module_rds_identifier\"></a> [rds\\_identifier](#module\\_rds\\_identifier) | cloudposse/label/null | 0.25.0 |\n| <a name=\"module_this\"></a> [this](#module\\_this) | cloudposse/label/null | 0.25.0 |\n\n## Resources\n\n| Name | Type |\n| ---- | ---- |\n| [aws_appautoscaling_policy.replicas](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_policy) | resource |\n| [aws_appautoscaling_target.replicas](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_target) | resource |\n| [aws_db_parameter_group.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_parameter_group) | resource |\n| [aws_db_subnet_group.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/db_subnet_group) | resource |\n| [aws_iam_role.enhanced_monitoring](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role_policy_attachment.enhanced_monitoring](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_rds_cluster.primary](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster) | resource |\n| [aws_rds_cluster.secondary](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster) | resource |\n| [aws_rds_cluster_activity_stream.primary](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_activity_stream) | resource |\n| [aws_rds_cluster_instance.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_instance) | resource |\n| [aws_rds_cluster_parameter_group.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_parameter_group) | resource |\n| [aws_rds_reserved_instance.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_reserved_instance) | resource |\n| [aws_security_group.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group) | resource |\n| [aws_security_group_rule.egress](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.egress_ipv6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.ingress_cidr_blocks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.ingress_ipv6_cidr_blocks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.ingress_security_groups](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.traffic_inside_security_group](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [random_pet.instance](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/pet) | resource |\n| [aws_iam_policy_document.enhanced_monitoring](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_partition.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/partition) | data source |\n| [aws_rds_reserved_instance_offering.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/rds_reserved_instance_offering) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n| ---- | ----------- | ---- | ------- | :------: |\n| <a name=\"input_activity_stream_enabled\"></a> [activity\\_stream\\_enabled](#input\\_activity\\_stream\\_enabled) | Whether to enable Activity Streams | `bool` | `false` | no |\n| <a name=\"input_activity_stream_kms_key_id\"></a> [activity\\_stream\\_kms\\_key\\_id](#input\\_activity\\_stream\\_kms\\_key\\_id) | The ARN for the KMS key to encrypt Activity Stream Data data. When specifying `activity_stream_kms_key_id`, `activity_stream_enabled` needs to be set to true | `string` | `\"\"` | no |\n| <a name=\"input_activity_stream_mode\"></a> [activity\\_stream\\_mode](#input\\_activity\\_stream\\_mode) | The mode for the Activity Streams. `async` and `sync` are supported. Defaults to `async` | `string` | `\"async\"` | no |\n| <a name=\"input_additional_tag_map\"></a> [additional\\_tag\\_map](#input\\_additional\\_tag\\_map) | Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.<br/>This is for some rare cases where resources want additional configuration of tags<br/>and therefore take a list of maps with tag key, value, and additional configuration. | `map(string)` | `{}` | no |\n| <a name=\"input_admin_password\"></a> [admin\\_password](#input\\_admin\\_password) | Password for the master DB user. Ignored if snapshot\\_identifier or replication\\_source\\_identifier is provided | `string` | `\"\"` | no |\n| <a name=\"input_admin_user\"></a> [admin\\_user](#input\\_admin\\_user) | Username for the master DB user. Ignored if snapshot\\_identifier or replication\\_source\\_identifier is provided | `string` | `\"admin\"` | no |\n| <a name=\"input_admin_user_secret_kms_key_id\"></a> [admin\\_user\\_secret\\_kms\\_key\\_id](#input\\_admin\\_user\\_secret\\_kms\\_key\\_id) | Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key.<br/>To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.<br/>If not specified, the default KMS key for your Amazon Web Services account is used. | `string` | `null` | no |\n| <a name=\"input_allocated_storage\"></a> [allocated\\_storage](#input\\_allocated\\_storage) | The allocated storage in GBs | `number` | `null` | no |\n| <a name=\"input_allow_major_version_upgrade\"></a> [allow\\_major\\_version\\_upgrade](#input\\_allow\\_major\\_version\\_upgrade) | Enable to allow major engine version upgrades when changing engine versions. Defaults to false. | `bool` | `false` | no |\n| <a name=\"input_allowed_cidr_blocks\"></a> [allowed\\_cidr\\_blocks](#input\\_allowed\\_cidr\\_blocks) | List of CIDR blocks allowed to access the cluster | `list(string)` | `[]` | no |\n| <a name=\"input_allowed_ipv6_cidr_blocks\"></a> [allowed\\_ipv6\\_cidr\\_blocks](#input\\_allowed\\_ipv6\\_cidr\\_blocks) | List of IPv6 CIDR blocks allowed to access the cluster | `list(string)` | `[]` | no |\n| <a name=\"input_apply_immediately\"></a> [apply\\_immediately](#input\\_apply\\_immediately) | Specifies whether any cluster modifications are applied immediately, or during the next maintenance window | `bool` | `true` | no |\n| <a name=\"input_attributes\"></a> [attributes](#input\\_attributes) | ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,<br/>in the order they appear in the list. New attributes are appended to the<br/>end of the list. The elements of the list are joined by the `delimiter`<br/>and treated as a single ID element. | `list(string)` | `[]` | no |\n| <a name=\"input_auto_minor_version_upgrade\"></a> [auto\\_minor\\_version\\_upgrade](#input\\_auto\\_minor\\_version\\_upgrade) | Indicates that minor engine upgrades will be applied automatically to the DB instance during the maintenance window | `bool` | `true` | no |\n| <a name=\"input_autoscaling_enabled\"></a> [autoscaling\\_enabled](#input\\_autoscaling\\_enabled) | Whether to enable cluster autoscaling | `bool` | `false` | no |\n| <a name=\"input_autoscaling_max_capacity\"></a> [autoscaling\\_max\\_capacity](#input\\_autoscaling\\_max\\_capacity) | Maximum number of instances to be maintained by the autoscaler | `number` | `5` | no |\n| <a name=\"input_autoscaling_min_capacity\"></a> [autoscaling\\_min\\_capacity](#input\\_autoscaling\\_min\\_capacity) | Minimum number of instances to be maintained by the autoscaler | `number` | `1` | no |\n| <a name=\"input_autoscaling_policy_type\"></a> [autoscaling\\_policy\\_type](#input\\_autoscaling\\_policy\\_type) | Autoscaling policy type. `TargetTrackingScaling` and `StepScaling` are supported | `string` | `\"TargetTrackingScaling\"` | no |\n| <a name=\"input_autoscaling_scale_in_cooldown\"></a> [autoscaling\\_scale\\_in\\_cooldown](#input\\_autoscaling\\_scale\\_in\\_cooldown) | The amount of time, in seconds, after a scaling activity completes and before the next scaling down activity can start. Default is 300s | `number` | `300` | no |\n| <a name=\"input_autoscaling_scale_out_cooldown\"></a> [autoscaling\\_scale\\_out\\_cooldown](#input\\_autoscaling\\_scale\\_out\\_cooldown) | The amount of time, in seconds, after a scaling activity completes and before the next scaling up activity can start. Default is 300s | `number` | `300` | no |\n| <a name=\"input_autoscaling_target_metrics\"></a> [autoscaling\\_target\\_metrics](#input\\_autoscaling\\_target\\_metrics) | The metrics type to use. If this value isn't provided the default is CPU utilization | `string` | `\"RDSReaderAverageCPUUtilization\"` | no |\n| <a name=\"input_autoscaling_target_value\"></a> [autoscaling\\_target\\_value](#input\\_autoscaling\\_target\\_value) | The target value to scale with respect to target metrics | `number` | `75` | no |\n| <a name=\"input_backtrack_window\"></a> [backtrack\\_window](#input\\_backtrack\\_window) | The target backtrack window, in seconds. Only available for aurora engine currently. Must be between 0 and 259200 (72 hours) | `number` | `0` | no |\n| <a name=\"input_backup_window\"></a> [backup\\_window](#input\\_backup\\_window) | Daily time range during which the backups happen | `string` | `\"07:00-09:00\"` | no |\n| <a name=\"input_ca_cert_identifier\"></a> [ca\\_cert\\_identifier](#input\\_ca\\_cert\\_identifier) | The identifier of the CA certificate for the DB instance | `string` | `null` | no |\n| <a name=\"input_cluster_dns_name\"></a> [cluster\\_dns\\_name](#input\\_cluster\\_dns\\_name) | Name of the cluster CNAME record to create in the parent DNS zone specified by `zone_id`. If left empty, the name will be auto-asigned using the format `master.var.name` | `string` | `\"\"` | no |\n| <a name=\"input_cluster_family\"></a> [cluster\\_family](#input\\_cluster\\_family) | The family of the DB cluster parameter group | `string` | `\"aurora5.6\"` | no |\n| <a name=\"input_cluster_identifier\"></a> [cluster\\_identifier](#input\\_cluster\\_identifier) | The RDS Cluster Identifier. Will use generated label ID if not supplied | `string` | `\"\"` | no |\n| <a name=\"input_cluster_parameters\"></a> [cluster\\_parameters](#input\\_cluster\\_parameters) | List of DB cluster parameters to apply | <pre>list(object({<br/>    apply_method = string<br/>    name         = string<br/>    value        = string<br/>  }))</pre> | `[]` | no |\n| <a name=\"input_cluster_size\"></a> [cluster\\_size](#input\\_cluster\\_size) | Number of DB instances to create in the cluster | `number` | `2` | no |\n| <a name=\"input_cluster_type\"></a> [cluster\\_type](#input\\_cluster\\_type) | Either `regional` or `global`.<br/>If `regional` will be created as a normal, standalone DB.<br/>If `global`, will be made part of a Global cluster (requires `global_cluster_identifier`). | `string` | `\"regional\"` | no |\n| <a name=\"input_context\"></a> [context](#input\\_context) | Single object for setting entire context at once.<br/>See description of individual variables for details.<br/>Leave string and numeric variables as `null` to use default value.<br/>Individual variable settings (non-null) override settings in context object,<br/>except for attributes, tags, and additional\\_tag\\_map, which are merged. | `any` | <pre>{<br/>  \"additional_tag_map\": {},<br/>  \"attributes\": [],<br/>  \"delimiter\": null,<br/>  \"descriptor_formats\": {},<br/>  \"enabled\": true,<br/>  \"environment\": null,<br/>  \"id_length_limit\": null,<br/>  \"label_key_case\": null,<br/>  \"label_order\": [],<br/>  \"label_value_case\": null,<br/>  \"labels_as_tags\": [<br/>    \"unset\"<br/>  ],<br/>  \"name\": null,<br/>  \"namespace\": null,<br/>  \"regex_replace_chars\": null,<br/>  \"stage\": null,<br/>  \"tags\": {},<br/>  \"tenant\": null<br/>}</pre> | no |\n| <a name=\"input_copy_tags_to_snapshot\"></a> [copy\\_tags\\_to\\_snapshot](#input\\_copy\\_tags\\_to\\_snapshot) | Copy tags to backup snapshots | `bool` | `false` | no |\n| <a name=\"input_database_insights_mode\"></a> [database\\_insights\\_mode](#input\\_database\\_insights\\_mode) | The database insights mode for the RDS cluster. Valid values are `standard`, `advanced`. See https://registry.terraform.io/providers/hashicorp/aws/6.16.0/docs/resources/rds_cluster#database_insights_mode-1 | `string` | `null` | no |\n| <a name=\"input_db_cluster_instance_class\"></a> [db\\_cluster\\_instance\\_class](#input\\_db\\_cluster\\_instance\\_class) | This setting is required to create a provisioned Multi-AZ DB cluster | `string` | `null` | no |\n| <a name=\"input_db_name\"></a> [db\\_name](#input\\_db\\_name) | Database name (default is not to create a database) | `string` | `\"\"` | no |\n| <a name=\"input_db_parameter_group_name\"></a> [db\\_parameter\\_group\\_name](#input\\_db\\_parameter\\_group\\_name) | The name to give to the created `aws_db_parameter_group` resource.<br/>If omitted, the module will generate a name. | `string` | `\"\"` | no |\n| <a name=\"input_db_port\"></a> [db\\_port](#input\\_db\\_port) | Database port | `number` | `3306` | no |\n| <a name=\"input_deletion_protection\"></a> [deletion\\_protection](#input\\_deletion\\_protection) | If the DB instance should have deletion protection enabled | `bool` | `false` | no |\n| <a name=\"input_delimiter\"></a> [delimiter](#input\\_delimiter) | Delimiter to be used between ID elements.<br/>Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all. | `string` | `null` | no |\n| <a name=\"input_descriptor_formats\"></a> [descriptor\\_formats](#input\\_descriptor\\_formats) | Describe additional descriptors to be output in the `descriptors` output map.<br/>Map of maps. Keys are names of descriptors. Values are maps of the form<br/>`{<br/>   format = string<br/>   labels = list(string)<br/>}`<br/>(Type is `any` so the map values can later be enhanced to provide additional options.)<br/>`format` is a Terraform format string to be passed to the `format()` function.<br/>`labels` is a list of labels, in order, to pass to `format()` function.<br/>Label values will be normalized before being passed to `format()` so they will be<br/>identical to how they appear in `id`.<br/>Default is `{}` (`descriptors` output will be empty). | `any` | `{}` | no |\n| <a name=\"input_egress_enabled\"></a> [egress\\_enabled](#input\\_egress\\_enabled) | Whether or not to apply the egress security group rule to default security group, defaults to `true` | `bool` | `true` | no |\n| <a name=\"input_enable_global_write_forwarding\"></a> [enable\\_global\\_write\\_forwarding](#input\\_enable\\_global\\_write\\_forwarding) | Set to `true`, to forward writes to an associated global cluster. | `bool` | `null` | no |\n| <a name=\"input_enable_http_endpoint\"></a> [enable\\_http\\_endpoint](#input\\_enable\\_http\\_endpoint) | Enable HTTP endpoint (data API). | `bool` | `false` | no |\n| <a name=\"input_enable_local_write_forwarding\"></a> [enable\\_local\\_write\\_forwarding](#input\\_enable\\_local\\_write\\_forwarding) | Set to `true`, to forward writes sent to a reader to the writer instance. | `bool` | `null` | no |\n| <a name=\"input_enabled\"></a> [enabled](#input\\_enabled) | Set to false to prevent the module from creating any resources | `bool` | `null` | no |\n| <a name=\"input_enabled_cloudwatch_logs_exports\"></a> [enabled\\_cloudwatch\\_logs\\_exports](#input\\_enabled\\_cloudwatch\\_logs\\_exports) | List of log types to export to cloudwatch. The following log types are supported: audit, error, general, slowquery | `list(string)` | `[]` | no |\n| <a name=\"input_engine\"></a> [engine](#input\\_engine) | The name of the database engine to be used for this DB cluster. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql` | `string` | `\"aurora\"` | no |\n| <a name=\"input_engine_mode\"></a> [engine\\_mode](#input\\_engine\\_mode) | The database engine mode. Valid values: `parallelquery`, `provisioned`, `serverless` | `string` | `\"provisioned\"` | no |\n| <a name=\"input_engine_version\"></a> [engine\\_version](#input\\_engine\\_version) | The version of the database engine to use. See `aws rds describe-db-engine-versions` | `string` | `\"\"` | no |\n| <a name=\"input_enhanced_monitoring_attributes\"></a> [enhanced\\_monitoring\\_attributes](#input\\_enhanced\\_monitoring\\_attributes) | The attributes for the enhanced monitoring IAM role | `list(string)` | <pre>[<br/>  \"enhanced-monitoring\"<br/>]</pre> | no |\n| <a name=\"input_enhanced_monitoring_role_enabled\"></a> [enhanced\\_monitoring\\_role\\_enabled](#input\\_enhanced\\_monitoring\\_role\\_enabled) | A boolean flag to enable/disable the creation of the enhanced monitoring IAM role. If set to `false`, the module will not create a new role and will use `rds_monitoring_role_arn` for enhanced monitoring | `bool` | `false` | no |\n| <a name=\"input_environment\"></a> [environment](#input\\_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | `null` | no |\n| <a name=\"input_global_cluster_identifier\"></a> [global\\_cluster\\_identifier](#input\\_global\\_cluster\\_identifier) | ID of the Aurora global cluster | `string` | `\"\"` | no |\n| <a name=\"input_iam_database_authentication_enabled\"></a> [iam\\_database\\_authentication\\_enabled](#input\\_iam\\_database\\_authentication\\_enabled) | Specifies whether or mappings of AWS Identity and Access Management (IAM) accounts to database accounts is enabled | `bool` | `false` | no |\n| <a name=\"input_iam_roles\"></a> [iam\\_roles](#input\\_iam\\_roles) | Iam roles for the Aurora cluster | `list(string)` | `[]` | no |\n| <a name=\"input_id_length_limit\"></a> [id\\_length\\_limit](#input\\_id\\_length\\_limit) | Limit `id` to this many characters (minimum 6).<br/>Set to `0` for unlimited length.<br/>Set to `null` for keep the existing setting, which defaults to `0`.<br/>Does not affect `id_full`. | `number` | `null` | no |\n| <a name=\"input_instance_availability_zone\"></a> [instance\\_availability\\_zone](#input\\_instance\\_availability\\_zone) | Optional parameter to place cluster instances in a specific availability zone. If left empty, will place randomly | `string` | `\"\"` | no |\n| <a name=\"input_instance_identifier_suffix\"></a> [instance\\_identifier\\_suffix](#input\\_instance\\_identifier\\_suffix) | The suffix to append to DB instance identifiers.<br/>If `null`, the module will generate a random suffix. If empty, no suffix will be appended. | `string` | `null` | no |\n| <a name=\"input_instance_parameters\"></a> [instance\\_parameters](#input\\_instance\\_parameters) | List of DB instance parameters to apply | <pre>list(object({<br/>    apply_method = string<br/>    name         = string<br/>    value        = string<br/>  }))</pre> | `[]` | no |\n| <a name=\"input_instance_type\"></a> [instance\\_type](#input\\_instance\\_type) | Instance type to use | `string` | `\"db.t2.small\"` | no |\n| <a name=\"input_intra_security_group_traffic_enabled\"></a> [intra\\_security\\_group\\_traffic\\_enabled](#input\\_intra\\_security\\_group\\_traffic\\_enabled) | Whether to allow traffic between resources inside the database's security group. | `bool` | `false` | no |\n| <a name=\"input_iops\"></a> [iops](#input\\_iops) | The amount of provisioned IOPS. Setting this implies a storage\\_type of 'io1'. This setting is required to create a Multi-AZ DB cluster. Check TF docs for values based on db engine | `number` | `null` | no |\n| <a name=\"input_kms_key_arn\"></a> [kms\\_key\\_arn](#input\\_kms\\_key\\_arn) | The ARN for the KMS encryption key. When specifying `kms_key_arn`, `storage_encrypted` needs to be set to `true` | `string` | `\"\"` | no |\n| <a name=\"input_label_key_case\"></a> [label\\_key\\_case](#input\\_label\\_key\\_case) | Controls the letter case of the `tags` keys (label names) for tags generated by this module.<br/>Does not affect keys of tags passed in via the `tags` input.<br/>Possible values: `lower`, `title`, `upper`.<br/>Default value: `title`. | `string` | `null` | no |\n| <a name=\"input_label_order\"></a> [label\\_order](#input\\_label\\_order) | The order in which the labels (ID elements) appear in the `id`.<br/>Defaults to [\"namespace\", \"environment\", \"stage\", \"name\", \"attributes\"].<br/>You can omit any of the 6 labels (\"tenant\" is the 6th), but at least one must be present. | `list(string)` | `null` | no |\n| <a name=\"input_label_value_case\"></a> [label\\_value\\_case](#input\\_label\\_value\\_case) | Controls the letter case of ID elements (labels) as included in `id`,<br/>set as tag values, and output by this module individually.<br/>Does not affect values of tags passed in via the `tags` input.<br/>Possible values: `lower`, `title`, `upper` and `none` (no transformation).<br/>Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs.<br/>Default value: `lower`. | `string` | `null` | no |\n| <a name=\"input_labels_as_tags\"></a> [labels\\_as\\_tags](#input\\_labels\\_as\\_tags) | Set of labels (ID elements) to include as tags in the `tags` output.<br/>Default is to include all labels.<br/>Tags with empty values will not be included in the `tags` output.<br/>Set to `[]` to suppress all generated tags.<br/>**Notes:**<br/>  The value of the `name` tag, if included, will be the `id`, not the `name`.<br/>  Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be<br/>  changed in later chained modules. Attempts to change it will be silently ignored. | `set(string)` | <pre>[<br/>  \"default\"<br/>]</pre> | no |\n| <a name=\"input_maintenance_window\"></a> [maintenance\\_window](#input\\_maintenance\\_window) | Weekly time range during which system maintenance can occur, in UTC | `string` | `\"wed:03:00-wed:04:00\"` | no |\n| <a name=\"input_manage_admin_user_password\"></a> [manage\\_admin\\_user\\_password](#input\\_manage\\_admin\\_user\\_password) | Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if master\\_password is provided | `bool` | `false` | no |\n| <a name=\"input_name\"></a> [name](#input\\_name) | ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.<br/>This is the only ID element not also included as a `tag`.<br/>The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input. | `string` | `null` | no |\n| <a name=\"input_namespace\"></a> [namespace](#input\\_namespace) | ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique | `string` | `null` | no |\n| <a name=\"input_network_type\"></a> [network\\_type](#input\\_network\\_type) | The network type of the cluster. Valid values: IPV4, DUAL. | `string` | `\"IPV4\"` | no |\n| <a name=\"input_parameter_group_name_prefix_enabled\"></a> [parameter\\_group\\_name\\_prefix\\_enabled](#input\\_parameter\\_group\\_name\\_prefix\\_enabled) | Set to `true` to use `name_prefix` to name the cluster and database parameter groups. Set to `false` to use `name` instead | `bool` | `true` | no |\n| <a name=\"input_performance_insights_enabled\"></a> [performance\\_insights\\_enabled](#input\\_performance\\_insights\\_enabled) | Whether to enable Performance Insights | `bool` | `false` | no |\n| <a name=\"input_performance_insights_kms_key_id\"></a> [performance\\_insights\\_kms\\_key\\_id](#input\\_performance\\_insights\\_kms\\_key\\_id) | The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true | `string` | `\"\"` | no |\n| <a name=\"input_performance_insights_retention_period\"></a> [performance\\_insights\\_retention\\_period](#input\\_performance\\_insights\\_retention\\_period) | Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years) | `number` | `null` | no |\n| <a name=\"input_promotion_tier\"></a> [promotion\\_tier](#input\\_promotion\\_tier) | Failover Priority setting on instance level. The reader who has lower tier has higher priority to get promoted to writer.<br/><br/>Readers in promotion tiers 0 and 1 scale at the same time as the writer. Readers in promotion tiers 2–15 scale independently from the writer. For more information, see: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.how-it-works.html#aurora-serverless-v2.how-it-works.scaling | `number` | `0` | no |\n| <a name=\"input_publicly_accessible\"></a> [publicly\\_accessible](#input\\_publicly\\_accessible) | Set to true if you want your cluster to be publicly accessible (such as via QuickSight) | `bool` | `false` | no |\n| <a name=\"input_rds_cluster_parameter_group_name\"></a> [rds\\_cluster\\_parameter\\_group\\_name](#input\\_rds\\_cluster\\_parameter\\_group\\_name) | The name to give to the created `aws_rds_cluster_parameter_group` resource.<br/>If omitted, the module will generate a name. | `string` | `\"\"` | no |\n| <a name=\"input_rds_monitoring_interval\"></a> [rds\\_monitoring\\_interval](#input\\_rds\\_monitoring\\_interval) | The interval, in seconds, between points when enhanced monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid Values: 0, 1, 5, 10, 15, 30, 60 | `number` | `0` | no |\n| <a name=\"input_rds_monitoring_role_arn\"></a> [rds\\_monitoring\\_role\\_arn](#input\\_rds\\_monitoring\\_role\\_arn) | The ARN for the IAM role that permits RDS to send enhanced monitoring metrics to CloudWatch Logs | `string` | `null` | no |\n| <a name=\"input_rds_ri_duration\"></a> [rds\\_ri\\_duration](#input\\_rds\\_ri\\_duration) | The number of years to reserve the instance. Values can be 1 or 3 (or in seconds, 31536000 or 94608000) | `number` | `1` | no |\n| <a name=\"input_rds_ri_offering_type\"></a> [rds\\_ri\\_offering\\_type](#input\\_rds\\_ri\\_offering\\_type) | Offering type of reserved DB instances. Valid values are 'No Upfront', 'Partial Upfront', 'All Upfront'. | `string` | `\"\"` | no |\n| <a name=\"input_rds_ri_reservation_id\"></a> [rds\\_ri\\_reservation\\_id](#input\\_rds\\_ri\\_reservation\\_id) | Customer-specified identifier to track the reservation of the reserved DB instance. | `string` | `null` | no |\n| <a name=\"input_reader_dns_name\"></a> [reader\\_dns\\_name](#input\\_reader\\_dns\\_name) | Name of the reader endpoint CNAME record to create in the parent DNS zone specified by `zone_id`. If left empty, the name will be auto-asigned using the format `replicas.var.name` | `string` | `\"\"` | no |\n| <a name=\"input_regex_replace_chars\"></a> [regex\\_replace\\_chars](#input\\_regex\\_replace\\_chars) | Terraform regular expression (regex) string.<br/>Characters matching the regex will be removed from the ID elements.<br/>If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits. | `string` | `null` | no |\n| <a name=\"input_replication_source_identifier\"></a> [replication\\_source\\_identifier](#input\\_replication\\_source\\_identifier) | ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica | `string` | `\"\"` | no |\n| <a name=\"input_restore_to_point_in_time\"></a> [restore\\_to\\_point\\_in\\_time](#input\\_restore\\_to\\_point\\_in\\_time) | List of point-in-time recovery options. Valid parameters are:<br/><br/>`source_cluster_identifier`<br/>  Identifier of the source database cluster from which to restore.<br/>`restore_type`:<br/>  Type of restore to be performed. Valid options are \"full-copy\" and \"copy-on-write\".<br/>`use_latest_restorable_time`:<br/>  Set to true to restore the database cluster to the latest restorable backup time. Conflicts with `restore_to_time`.<br/>`restore_to_time`:<br/>  Date and time in UTC format to restore the database cluster to. Conflicts with `use_latest_restorable_time`. | <pre>list(object({<br/>    source_cluster_identifier  = string<br/>    restore_type               = optional(string, \"copy-on-write\")<br/>    use_latest_restorable_time = optional(bool, true)<br/>    restore_to_time            = optional(string, null)<br/>  }))</pre> | `[]` | no |\n| <a name=\"input_retention_period\"></a> [retention\\_period](#input\\_retention\\_period) | Number of days to retain backups for | `number` | `5` | no |\n| <a name=\"input_s3_import\"></a> [s3\\_import](#input\\_s3\\_import) | Restore from a Percona Xtrabackup in S3. The `bucket_name` is required to be in the same region as the resource. | <pre>object({<br/>    bucket_name           = string<br/>    bucket_prefix         = string<br/>    ingestion_role        = string<br/>    source_engine         = string<br/>    source_engine_version = string<br/>  })</pre> | `null` | no |\n| <a name=\"input_scaling_configuration\"></a> [scaling\\_configuration](#input\\_scaling\\_configuration) | List of nested attributes with scaling properties. Only valid when `engine_mode` is set to `serverless` | <pre>list(object({<br/>    auto_pause               = bool<br/>    max_capacity             = number<br/>    min_capacity             = number<br/>    seconds_until_auto_pause = number<br/>    timeout_action           = string<br/>  }))</pre> | `[]` | no |\n| <a name=\"input_security_groups\"></a> [security\\_groups](#input\\_security\\_groups) | List of security groups to be allowed to connect to the DB instance | `list(string)` | `[]` | no |\n| <a name=\"input_serverlessv2_scaling_configuration\"></a> [serverlessv2\\_scaling\\_configuration](#input\\_serverlessv2\\_scaling\\_configuration) | serverlessv2 scaling properties | <pre>object({<br/>    min_capacity             = number<br/>    max_capacity             = number<br/>    seconds_until_auto_pause = optional(number, null)<br/>  })</pre> | `null` | no |\n| <a name=\"input_skip_final_snapshot\"></a> [skip\\_final\\_snapshot](#input\\_skip\\_final\\_snapshot) | Determines whether a final DB snapshot is created before the DB cluster is deleted | `bool` | `true` | no |\n| <a name=\"input_snapshot_identifier\"></a> [snapshot\\_identifier](#input\\_snapshot\\_identifier) | Specifies whether or not to create this cluster from a snapshot | `string` | `null` | no |\n| <a name=\"input_source_region\"></a> [source\\_region](#input\\_source\\_region) | Source Region of primary cluster, needed when using encrypted storage and region replicas | `string` | `\"\"` | no |\n| <a name=\"input_stage\"></a> [stage](#input\\_stage) | ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release' | `string` | `null` | no |\n| <a name=\"input_storage_encrypted\"></a> [storage\\_encrypted](#input\\_storage\\_encrypted) | Specifies whether the DB cluster is encrypted. The default is `false` for `provisioned` `engine_mode` and `true` for `serverless` `engine_mode` | `bool` | `false` | no |\n| <a name=\"input_storage_type\"></a> [storage\\_type](#input\\_storage\\_type) | One of 'standard' (magnetic), 'gp2' (general purpose SSD), 'io1' (provisioned IOPS SSD), 'aurora', or 'aurora-iopt1' | `string` | `null` | no |\n| <a name=\"input_subnet_group_name\"></a> [subnet\\_group\\_name](#input\\_subnet\\_group\\_name) | Database subnet group name. Will use generated label ID if not supplied. | `string` | `\"\"` | no |\n| <a name=\"input_subnets\"></a> [subnets](#input\\_subnets) | List of VPC subnet IDs | `list(string)` | n/a | yes |\n| <a name=\"input_tags\"></a> [tags](#input\\_tags) | Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).<br/>Neither the tag keys nor the tag values will be modified by this module. | `map(string)` | `{}` | no |\n| <a name=\"input_tenant\"></a> [tenant](#input\\_tenant) | ID element \\_(Rarely used, not included by default)\\_. A customer identifier, indicating who this instance of a resource is for | `string` | `null` | no |\n| <a name=\"input_timeouts_configuration\"></a> [timeouts\\_configuration](#input\\_timeouts\\_configuration) | List of timeout values per action. Only valid actions are `create`, `update` and `delete` | <pre>list(object({<br/>    create = string<br/>    update = string<br/>    delete = string<br/>  }))</pre> | `[]` | no |\n| <a name=\"input_use_reserved_instances\"></a> [use\\_reserved\\_instances](#input\\_use\\_reserved\\_instances) | WARNING: Observe your plans and applies carefully when using this feature.<br/>It has potential to be very expensive if not used correctly.<br/>Also, it is not clear what happens when the reservation expires.<br/><br/>Whether to use reserved instances. | `bool` | `false` | no |\n| <a name=\"input_vpc_id\"></a> [vpc\\_id](#input\\_vpc\\_id) | VPC ID to create the cluster in (e.g. `vpc-a22222ee`) | `string` | n/a | yes |\n| <a name=\"input_vpc_security_group_ids\"></a> [vpc\\_security\\_group\\_ids](#input\\_vpc\\_security\\_group\\_ids) | Additional security group IDs to apply to the cluster, in addition to the provisioned default security group with ingress traffic from existing CIDR blocks and existing security groups | `list(string)` | `[]` | no |\n| <a name=\"input_zone_id\"></a> [zone\\_id](#input\\_zone\\_id) | Route53 DNS Zone ID as list of string (0 or 1 items). If empty, no custom DNS name will be published.<br/>If the list contains a single Zone ID, a custom DNS name will be pulished in that zone.<br/>Can also be a plain string, but that use is DEPRECATED because of Terraform issues. | `any` | `[]` | no |\n\n## Outputs\n\n| Name | Description |\n| ---- | ----------- |\n| <a name=\"output_activity_stream_arn\"></a> [activity\\_stream\\_arn](#output\\_activity\\_stream\\_arn) | Activity Stream ARN |\n| <a name=\"output_activity_stream_name\"></a> [activity\\_stream\\_name](#output\\_activity\\_stream\\_name) | Activity Stream Name |\n| <a name=\"output_admin_user_secret\"></a> [admin\\_user\\_secret](#output\\_admin\\_user\\_secret) | The secret manager attributes for the managed admin user password (`master_user_secret`). |\n| <a name=\"output_arn\"></a> [arn](#output\\_arn) | Amazon Resource Name (ARN) of the cluster |\n| <a name=\"output_cluster_identifier\"></a> [cluster\\_identifier](#output\\_cluster\\_identifier) | Cluster Identifier |\n| <a name=\"output_cluster_resource_id\"></a> [cluster\\_resource\\_id](#output\\_cluster\\_resource\\_id) | The region-unique, immutable identifie of the cluster |\n| <a name=\"output_cluster_security_groups\"></a> [cluster\\_security\\_groups](#output\\_cluster\\_security\\_groups) | Default RDS cluster security groups |\n| <a name=\"output_database_name\"></a> [database\\_name](#output\\_database\\_name) | Database name |\n| <a name=\"output_dbi_resource_ids\"></a> [dbi\\_resource\\_ids](#output\\_dbi\\_resource\\_ids) | List of the region-unique, immutable identifiers for the DB instances in the cluster |\n| <a name=\"output_endpoint\"></a> [endpoint](#output\\_endpoint) | The DNS address of the RDS instance |\n| <a name=\"output_instance_arns\"></a> [instance\\_arns](#output\\_instance\\_arns) | List of ARNs of the DB instances in the cluster |\n| <a name=\"output_instance_endpoints\"></a> [instance\\_endpoints](#output\\_instance\\_endpoints) | List of DNS addresses for the DB instances in the cluster |\n| <a name=\"output_master_host\"></a> [master\\_host](#output\\_master\\_host) | DB Master hostname |\n| <a name=\"output_master_username\"></a> [master\\_username](#output\\_master\\_username) | Username for the master DB user |\n| <a name=\"output_port\"></a> [port](#output\\_port) | DB port |\n| <a name=\"output_reader_endpoint\"></a> [reader\\_endpoint](#output\\_reader\\_endpoint) | A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas |\n| <a name=\"output_replicas_host\"></a> [replicas\\_host](#output\\_replicas\\_host) | Replicas hostname |\n| <a name=\"output_reserved_instance\"></a> [reserved\\_instance](#output\\_reserved\\_instance) | All information about the reserved instance(s) if created. |\n| <a name=\"output_security_group_arn\"></a> [security\\_group\\_arn](#output\\_security\\_group\\_arn) | Security Group ARN |\n| <a name=\"output_security_group_id\"></a> [security\\_group\\_id](#output\\_security\\_group\\_id) | Security Group ID |\n| <a name=\"output_security_group_name\"></a> [security\\_group\\_name](#output\\_security\\_group\\_name) | Security Group name |\n<!-- markdownlint-restore -->\n\n\n\n\n\n\n\n## Related Projects\n\nCheck out these related projects.\n\n- [terraform-aws-rds](https://github.com/cloudposse/terraform-aws-rds) - Terraform module to provision AWS RDS instances\n- [terraform-aws-rds-cloudwatch-sns-alarms](https://github.com/cloudposse/terraform-aws-rds-cloudwatch-sns-alarms) - Terraform module that configures important RDS alerts using CloudWatch and sends them to an SNS topic\n\n\n> [!TIP]\n> #### Use Terraform Reference Architectures for AWS\n>\n> Use Cloud Posse's ready-to-go [terraform architecture blueprints](https://cloudposse.com/reference-architecture/) for AWS to get up and running quickly.\n>\n> ✅ We build it together with your team.<br/>\n> ✅ Your team owns everything.<br/>\n> ✅ 100% Open Source and backed by fanatical support.<br/>\n>\n> <a href=\"https://cpco.io/commercial-support?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=commercial_support\"><img alt=\"Request Quote\" src=\"https://img.shields.io/badge/request%20quote-success.svg?style=for-the-badge\"/></a>\n> <details><summary>📚 <strong>Learn More</strong></summary>\n>\n> <br/>\n>\n> Cloud Posse is the leading [**DevOps Accelerator**](https://cpco.io/commercial-support?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=commercial_support) for funded startups and enterprises.\n>\n> *Your team can operate like a pro today.*\n>\n> Ensure that your team succeeds by using Cloud Posse's proven process and turnkey blueprints. Plus, we stick around until you succeed.\n> #### Day-0:  Your Foundation for Success\n> - **Reference Architecture.** You'll get everything you need from the ground up built using 100% infrastructure as code.\n> - **Deployment Strategy.** Adopt a proven deployment strategy with GitHub Actions, enabling automated, repeatable, and reliable software releases.\n> - **Site Reliability Engineering.** Gain total visibility into your applications and services with Datadog, ensuring high availability and performance.\n> - **Security Baseline.** Establish a secure environment from the start, with built-in governance, accountability, and comprehensive audit logs, safeguarding your operations.\n> - **GitOps.** Empower your team to manage infrastructure changes confidently and efficiently through Pull Requests, leveraging the full power of GitHub Actions.\n>\n> <a href=\"https://cpco.io/commercial-support?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=commercial_support\"><img alt=\"Request Quote\" src=\"https://img.shields.io/badge/request%20quote-success.svg?style=for-the-badge\"/></a>\n>\n> #### Day-2: Your Operational Mastery\n> - **Training.** Equip your team with the knowledge and skills to confidently manage the infrastructure, ensuring long-term success and self-sufficiency.\n> - **Support.** Benefit from a seamless communication over Slack with our experts, ensuring you have the support you need, whenever you need it.\n> - **Troubleshooting.** Access expert assistance to quickly resolve any operational challenges, minimizing downtime and maintaining business continuity.\n> - **Code Reviews.** Enhance your team’s code quality with our expert feedback, fostering continuous improvement and collaboration.\n> - **Bug Fixes.** Rely on our team to troubleshoot and resolve any issues, ensuring your systems run smoothly.\n> - **Migration Assistance.** Accelerate your migration process with our dedicated support, minimizing disruption and speeding up time-to-value.\n> - **Customer Workshops.** Engage with our team in weekly workshops, gaining insights and strategies to continuously improve and innovate.\n>\n> <a href=\"https://cpco.io/commercial-support?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=commercial_support\"><img alt=\"Request Quote\" src=\"https://img.shields.io/badge/request%20quote-success.svg?style=for-the-badge\"/></a>\n> \n</details>\n\n## ✨ Contributing\n\nThis project is under active development, and we encourage contributions from our community.\n\n\n\nMany thanks to our outstanding contributors:\n\n<a href=\"https://github.com/cloudposse/terraform-aws-rds-cluster/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=cloudposse/terraform-aws-rds-cluster&max=24\" />\n</a>\n\nFor 🐛 bug reports & feature requests, please use the [issue tracker](https://github.com/cloudposse/terraform-aws-rds-cluster/issues).\n\nIn general, PRs are welcome. We follow the typical \"fork-and-pull\" Git workflow.\n 1. Review our [Code of Conduct](https://github.com/cloudposse/terraform-aws-rds-cluster/?tab=coc-ov-file#code-of-conduct) and [Contributor Guidelines](https://github.com/cloudposse/.github/blob/main/CONTRIBUTING.md).\n 2. **Fork** the repo on GitHub\n 3. **Clone** the project to your own machine\n 4. **Commit** changes to your own branch\n 5. **Push** your work back up to your fork\n 6. Submit a **Pull Request** so that we can review your changes\n\n**NOTE:** Be sure to merge the latest changes from \"upstream\" before making a pull request!\n\n\n## Running Terraform Tests\n\nWe use [Atmos](https://atmos.tools) to streamline how Terraform tests are run. It centralizes configuration and wraps common test workflows with easy-to-use commands.\n\nAll tests are located in the [`test/`](test) folder.\n\nUnder the hood, tests are powered by Terratest together with our internal [Test Helpers](https://github.com/cloudposse/test-helpers) library, providing robust infrastructure validation.\n\nSetup dependencies:\n- Install Atmos ([installation guide](https://atmos.tools/install/))\n- Install Go [1.24+ or newer](https://go.dev/doc/install)\n- Install Terraform or OpenTofu\n\nTo run tests:\n\n- Run all tests:  \n  ```sh\n  atmos test run\n  ```\n- Clean up test artifacts:  \n  ```sh\n  atmos test clean\n  ```\n- Explore additional test options:  \n  ```sh\n  atmos test --help\n  ```\nThe configuration for test commands is centrally managed. To review what's being imported, see the [`atmos.yaml`](https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/.github/atmos/terraform-module.yaml) file.\n\nLearn more about our [automated testing in our documentation](https://docs.cloudposse.com/community/contribute/automated-testing/) or implementing [custom commands](https://atmos.tools/core-concepts/custom-commands/) with atmos.\n\n### 🌎 Slack Community\n\nJoin our [Open Source Community](https://cpco.io/slack?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=slack) on Slack. It's **FREE** for everyone! Our \"SweetOps\" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build totally *sweet* infrastructure.\n\n### 📰 Newsletter\n\nSign up for [our newsletter](https://cpco.io/newsletter?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=newsletter) and join 3,000+ DevOps engineers, CTOs, and founders who get insider access to the latest DevOps trends, so you can always stay in the know.\nDropped straight into your Inbox every week — and usually a 5-minute read.\n\n### 📆 Office Hours <a href=\"https://cloudposse.com/office-hours?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=office_hours\"><img src=\"https://img.cloudposse.com/fit-in/200x200/https://cloudposse.com/wp-content/uploads/2019/08/Powered-by-Zoom.png\" align=\"right\" /></a>\n\n[Join us every Wednesday via Zoom](https://cloudposse.com/office-hours?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=office_hours) for your weekly dose of insider DevOps trends, AWS news and Terraform insights, all sourced from our SweetOps community, plus a _live Q&A_ that you can’t find anywhere else.\nIt's **FREE** for everyone!\n## License\n\n<a href=\"https://opensource.org/licenses/Apache-2.0\"><img src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=for-the-badge\" alt=\"License\"></a>\n\n<details>\n<summary>Preamble to the Apache License, Version 2.0</summary>\n<br/>\n<br/>\n\nComplete license is available in the [`LICENSE`](LICENSE) file.\n\n```text\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreements.  See the NOTICE file\ndistributed with this work for additional information\nregarding copyright ownership.  The ASF licenses this file\nto you under the Apache License, Version 2.0 (the\n\"License\"); you may not use this file except in compliance\nwith the License.  You may obtain a copy of the License at\n\n  https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License.\n```\n</details>\n\n## Trademarks\n\nAll other trademarks referenced herein are the property of their respective owners.\n\n\n---\nCopyright © 2017-2026 [Cloud Posse, LLC](https://cpco.io/copyright)\n\n\n<a href=\"https://cloudposse.com/readme/footer/link?utm_source=github&utm_medium=readme&utm_campaign=cloudposse/terraform-aws-rds-cluster&utm_content=readme_footer_link\"><img alt=\"README footer\" src=\"https://cloudposse.com/readme/footer/img\"/></a>\n\n<img alt=\"Beacon\" width=\"0\" src=\"https://ga-beacon.cloudposse.com/UA-76589703-4/cloudposse/terraform-aws-rds-cluster?pixel&cs=github&cm=readme&an=terraform-aws-rds-cluster\"/>\n"
  },
  {
    "path": "README.yaml",
    "content": "name: terraform-aws-rds-cluster\n\ntags:\n  - aws\n  - terraform\n  - terraform-modules\n  - databases\n  - rds\n  - rds-database\n  - aurora\n  - mysql\n  - cluster\n\ncategories:\n  - terraform-modules/databases\n\nlicense: APACHE2\n\ngithub_repo: cloudposse/terraform-aws-rds-cluster\n\nbadges:\n  - name: Latest Release\n    image: https://img.shields.io/github/release/cloudposse/terraform-aws-rds-cluster.svg?style=for-the-badge\n    url: https://github.com/cloudposse/terraform-aws-rds-cluster/releases/latest\n  - name: Last Updated\n    image: https://img.shields.io/github/last-commit/cloudposse/terraform-aws-rds-cluster.svg?style=for-the-badge\n    url: https://github.com/cloudposse/terraform-aws-rds-cluster/commits\n  - name: Slack Community\n    image: https://slack.cloudposse.com/for-the-badge.svg\n    url: https://cloudposse.com/slack\n\n# List any related terraform modules that this module may be used with or that this module depends on.\nrelated:\n  - name: terraform-aws-rds\n    description: Terraform module to provision AWS RDS instances\n    url: https://github.com/cloudposse/terraform-aws-rds\n  - name: terraform-aws-rds-cloudwatch-sns-alarms\n    description: Terraform module that configures important RDS alerts using CloudWatch and sends them to an SNS topic\n    url: https://github.com/cloudposse/terraform-aws-rds-cloudwatch-sns-alarms\n\ndescription: |-\n  Terraform module to provision an [`RDS Aurora`](https://aws.amazon.com/rds/aurora) cluster for MySQL or Postgres.\n\n  Supports [Amazon Aurora Serverless](https://aws.amazon.com/rds/aurora/serverless/).\n\nusage: |2-\n\n  For a complete example, see [examples/complete](examples/complete).\n\n  For automated tests of the complete example using [bats](https://github.com/bats-core/bats-core) and [Terratest](https://github.com/gruntwork-io/terratest) (which tests and deploys the example on AWS), see [test](test).\n\n  [Basic example](examples/basic)\n\n  ```hcl\n  module \"rds_cluster_aurora_postgres\" {\n    source = \"cloudposse/rds-cluster/aws\"\n    # Cloud Posse recommends pinning every module to a specific version\n    # version     = \"x.x.x\"\n\n    name            = \"postgres\"\n    engine          = \"aurora-postgresql\"\n    cluster_family  = \"aurora-postgresql9.6\"\n    # 1 writer, 1 reader\n    cluster_size    = 2\n    # 1 writer, 3 reader\n    # cluster_size    = 4\n    # 1 writer, 5 reader\n    # cluster_size    = 6\n    namespace       = \"eg\"\n    stage           = \"dev\"\n    admin_user      = \"admin1\"\n    admin_password  = \"Test123456789\"\n    db_name         = \"dbname\"\n    db_port         = 5432\n    instance_type   = \"db.r4.large\"\n    vpc_id          = \"vpc-xxxxxxxx\"\n    security_groups = [\"sg-xxxxxxxx\"]\n    subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n    zone_id         = \"Zxxxxxxxx\"\n  }\n  ```\n\n\n  [Serverless Aurora MySQL 5.6](examples/serverless_mysql)\n\n  ```hcl\n  module \"rds_cluster_aurora_mysql_serverless\" {\n    source = \"cloudposse/rds-cluster/aws\"\n    # Cloud Posse recommends pinning every module to a specific version\n    # version     = \"x.x.x\"\n    namespace            = \"eg\"\n    stage                = \"dev\"\n    name                 = \"db\"\n    engine               = \"aurora\"\n    engine_mode          = \"serverless\"\n    cluster_family       = \"aurora5.6\"\n    cluster_size         = 0\n    admin_user           = \"admin1\"\n    admin_password       = \"Test123456789\"\n    db_name              = \"dbname\"\n    db_port              = 3306\n    instance_type        = \"db.t2.small\"\n    vpc_id               = \"vpc-xxxxxxxx\"\n    security_groups      = [\"sg-xxxxxxxx\"]\n    subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n    zone_id              = \"Zxxxxxxxx\"\n    enable_http_endpoint = true\n\n    scaling_configuration = [\n      {\n        auto_pause               = true\n        max_capacity             = 256\n        min_capacity             = 2\n        seconds_until_auto_pause = 300\n      }\n    ]\n  }\n  ```\n\n  [Serverless Aurora 2.07.1 MySQL 5.7](examples/serverless_mysql57)\n\n  ```hcl\n  module \"rds_cluster_aurora_mysql_serverless\" {\n    source = \"cloudposse/rds-cluster/aws\"\n    # Cloud Posse recommends pinning every module to a specific version\n    # version     = \"x.x.x\"\n    namespace            = \"eg\"\n    stage                = \"dev\"\n    name                 = \"db\"\n    engine               = \"aurora-mysql\"\n    engine_mode          = \"serverless\"\n    engine_version       = \"5.7.mysql_aurora.2.07.1\"\n    cluster_family       = \"aurora-mysql5.7\"\n    cluster_size         = 0\n    admin_user           = \"admin1\"\n    admin_password       = \"Test123456789\"\n    db_name              = \"dbname\"\n    db_port              = 3306\n    vpc_id               = \"vpc-xxxxxxxx\"\n    security_groups      = [\"sg-xxxxxxxx\"]\n    subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n    zone_id              = \"Zxxxxxxxx\"\n    enable_http_endpoint = true\n\n    scaling_configuration = [\n      {\n        auto_pause               = true\n        max_capacity             = 16\n        min_capacity             = 1\n        seconds_until_auto_pause = 300\n        timeout_action           = \"ForceApplyCapacityChange\"\n      }\n    ]\n  }\n  ```\n\n  [With cluster parameters](examples/with_cluster_parameters)\n\n  ```hcl\n  module \"rds_cluster_aurora_mysql\" {\n    source = \"cloudposse/rds-cluster/aws\"\n    # Cloud Posse recommends pinning every module to a specific version\n    # version     = \"x.x.x\"\n    engine          = \"aurora\"\n    cluster_family  = \"aurora-mysql5.7\"\n    cluster_size    = 2\n    namespace       = \"eg\"\n    stage           = \"dev\"\n    name            = \"db\"\n    admin_user      = \"admin1\"\n    admin_password  = \"Test123456789\"\n    db_name         = \"dbname\"\n    instance_type   = \"db.t2.small\"\n    vpc_id          = \"vpc-xxxxxxx\"\n    security_groups = [\"sg-xxxxxxxx\"]\n    subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n    zone_id         = \"Zxxxxxxxx\"\n\n    cluster_parameters = [\n      {\n        name  = \"character_set_client\"\n        value = \"utf8\"\n      },\n      {\n        name  = \"character_set_connection\"\n        value = \"utf8\"\n      },\n      {\n        name  = \"character_set_database\"\n        value = \"utf8\"\n      },\n      {\n        name  = \"character_set_results\"\n        value = \"utf8\"\n      },\n      {\n        name  = \"character_set_server\"\n        value = \"utf8\"\n      },\n      {\n        name  = \"collation_connection\"\n        value = \"utf8_bin\"\n      },\n      {\n        name  = \"collation_server\"\n        value = \"utf8_bin\"\n      },\n      {\n        name         = \"lower_case_table_names\"\n        value        = \"1\"\n        apply_method = \"pending-reboot\"\n      },\n      {\n        name         = \"skip-character-set-client-handshake\"\n        value        = \"1\"\n        apply_method = \"pending-reboot\"\n      }\n    ]\n  }\n  ```\n\n  [With enhanced monitoring](examples/enhanced_monitoring)\n\n  ```hcl\n  # create IAM role for monitoring\n  resource \"aws_iam_role\" \"enhanced_monitoring\" {\n    name               = \"rds-cluster-example-1\"\n    assume_role_policy = data.aws_iam_policy_document.enhanced_monitoring.json\n  }\n\n  # Attach Amazon's managed policy for RDS enhanced monitoring\n  resource \"aws_iam_role_policy_attachment\" \"enhanced_monitoring\" {\n    role       = aws_iam_role.enhanced_monitoring.name\n    policy_arn = \"arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole\"\n  }\n\n  # allow rds to assume this role\n  data \"aws_iam_policy_document\" \"enhanced_monitoring\" {\n    statement {\n        actions = [\n        \"sts:AssumeRole\",\n      ]\n\n      effect = \"Allow\"\n\n      principals {\n        type        = \"Service\"\n        identifiers = [\"monitoring.rds.amazonaws.com\"]\n      }\n    }\n  }\n\n  module \"rds_cluster_aurora_postgres\" {\n    source = \"cloudposse/rds-cluster/aws\"\n    # Cloud Posse recommends pinning every module to a specific version\n    # version     = \"x.x.x\"\n    engine          = \"aurora-postgresql\"\n    cluster_family  = \"aurora-postgresql9.6\"\n    cluster_size    = 2\n    namespace       = \"eg\"\n    stage           = \"dev\"\n    name            = \"db\"\n    admin_user      = \"admin1\"\n    admin_password  = \"Test123456789\"\n    db_name         = \"dbname\"\n    db_port         = 5432\n    instance_type   = \"db.r4.large\"\n    vpc_id          = \"vpc-xxxxxxx\"\n    security_groups = [\"sg-xxxxxxxx\"]\n    subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n    zone_id         = \"Zxxxxxxxx\"\n\n    # enable monitoring every 30 seconds\n    rds_monitoring_interval = 30\n\n    # reference iam role created above\n    rds_monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn\n  }\n  ```\n\nexamples: |-\n  Review the [complete example](examples/complete) to see how to use this module.\n\ninclude: []\ncontributors: []\n"
  },
  {
    "path": "atmos.yaml",
    "content": "# Atmos Configuration — powered by https://atmos.tools\n#\n# This configuration enables centralized, DRY, and consistent project scaffolding using Atmos.\n#\n# Included features:\n# - Organizational custom commands: https://atmos.tools/core-concepts/custom-commands\n# - Automated README generation: https://atmos.tools/cli/commands/docs/generate\n#\n\n# Import shared configuration used by all modules\nimport:\n  - https://raw.githubusercontent.com/cloudposse/.github/refs/heads/main/.github/atmos/terraform-module.yaml\n"
  },
  {
    "path": "context.tf",
    "content": "#\n# ONLY EDIT THIS FILE IN github.com/cloudposse/terraform-null-label\n# All other instances of this file should be a copy of that one\n#\n#\n# Copy this file from https://github.com/cloudposse/terraform-null-label/blob/master/exports/context.tf\n# and then place it in your Terraform module to automatically get\n# Cloud Posse's standard configuration inputs suitable for passing\n# to Cloud Posse modules.\n#\n# curl -sL https://raw.githubusercontent.com/cloudposse/terraform-null-label/master/exports/context.tf -o context.tf\n#\n# Modules should access the whole context as `module.this.context`\n# to get the input variables with nulls for defaults,\n# for example `context = module.this.context`,\n# and access individual variables as `module.this.<var>`,\n# with final values filled in.\n#\n# For example, when using defaults, `module.this.context.delimiter`\n# will be null, and `module.this.delimiter` will be `-` (hyphen).\n#\n\nmodule \"this\" {\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\" # requires Terraform >= 0.13.0\n\n  enabled             = var.enabled\n  namespace           = var.namespace\n  tenant              = var.tenant\n  environment         = var.environment\n  stage               = var.stage\n  name                = var.name\n  delimiter           = var.delimiter\n  attributes          = var.attributes\n  tags                = var.tags\n  additional_tag_map  = var.additional_tag_map\n  label_order         = var.label_order\n  regex_replace_chars = var.regex_replace_chars\n  id_length_limit     = var.id_length_limit\n  label_key_case      = var.label_key_case\n  label_value_case    = var.label_value_case\n  descriptor_formats  = var.descriptor_formats\n  labels_as_tags      = var.labels_as_tags\n\n  context = var.context\n}\n\n# Copy contents of cloudposse/terraform-null-label/variables.tf here\n\nvariable \"context\" {\n  type = any\n  default = {\n    enabled             = true\n    namespace           = null\n    tenant              = null\n    environment         = null\n    stage               = null\n    name                = null\n    delimiter           = null\n    attributes          = []\n    tags                = {}\n    additional_tag_map  = {}\n    regex_replace_chars = null\n    label_order         = []\n    id_length_limit     = null\n    label_key_case      = null\n    label_value_case    = null\n    descriptor_formats  = {}\n    # Note: we have to use [] instead of null for unset lists due to\n    # https://github.com/hashicorp/terraform/issues/28137\n    # which was not fixed until Terraform 1.0.0,\n    # but we want the default to be all the labels in `label_order`\n    # and we want users to be able to prevent all tag generation\n    # by setting `labels_as_tags` to `[]`, so we need\n    # a different sentinel to indicate \"default\"\n    labels_as_tags = [\"unset\"]\n  }\n  description = <<-EOT\n    Single object for setting entire context at once.\n    See description of individual variables for details.\n    Leave string and numeric variables as `null` to use default value.\n    Individual variable settings (non-null) override settings in context object,\n    except for attributes, tags, and additional_tag_map, which are merged.\n  EOT\n\n  validation {\n    condition     = lookup(var.context, \"label_key_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\"], var.context[\"label_key_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n\n  validation {\n    condition     = lookup(var.context, \"label_value_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.context[\"label_value_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"enabled\" {\n  type        = bool\n  default     = null\n  description = \"Set to false to prevent the module from creating any resources\"\n}\n\nvariable \"namespace\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique\"\n}\n\nvariable \"tenant\" {\n  type        = string\n  default     = null\n  description = \"ID element _(Rarely used, not included by default)_. A customer identifier, indicating who this instance of a resource is for\"\n}\n\nvariable \"environment\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'\"\n}\n\nvariable \"stage\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'\"\n}\n\nvariable \"name\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.\n    This is the only ID element not also included as a `tag`.\n    The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input.\n    EOT\n}\n\nvariable \"delimiter\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Delimiter to be used between ID elements.\n    Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all.\n  EOT\n}\n\nvariable \"attributes\" {\n  type        = list(string)\n  default     = []\n  description = <<-EOT\n    ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,\n    in the order they appear in the list. New attributes are appended to the\n    end of the list. The elements of the list are joined by the `delimiter`\n    and treated as a single ID element.\n    EOT\n}\n\nvariable \"labels_as_tags\" {\n  type        = set(string)\n  default     = [\"default\"]\n  description = <<-EOT\n    Set of labels (ID elements) to include as tags in the `tags` output.\n    Default is to include all labels.\n    Tags with empty values will not be included in the `tags` output.\n    Set to `[]` to suppress all generated tags.\n    **Notes:**\n      The value of the `name` tag, if included, will be the `id`, not the `name`.\n      Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be\n      changed in later chained modules. Attempts to change it will be silently ignored.\n    EOT\n}\n\nvariable \"tags\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).\n    Neither the tag keys nor the tag values will be modified by this module.\n    EOT\n}\n\nvariable \"additional_tag_map\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.\n    This is for some rare cases where resources want additional configuration of tags\n    and therefore take a list of maps with tag key, value, and additional configuration.\n    EOT\n}\n\nvariable \"label_order\" {\n  type        = list(string)\n  default     = null\n  description = <<-EOT\n    The order in which the labels (ID elements) appear in the `id`.\n    Defaults to [\"namespace\", \"environment\", \"stage\", \"name\", \"attributes\"].\n    You can omit any of the 6 labels (\"tenant\" is the 6th), but at least one must be present.\n    EOT\n}\n\nvariable \"regex_replace_chars\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Terraform regular expression (regex) string.\n    Characters matching the regex will be removed from the ID elements.\n    If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits.\n  EOT\n}\n\nvariable \"id_length_limit\" {\n  type        = number\n  default     = null\n  description = <<-EOT\n    Limit `id` to this many characters (minimum 6).\n    Set to `0` for unlimited length.\n    Set to `null` for keep the existing setting, which defaults to `0`.\n    Does not affect `id_full`.\n  EOT\n  validation {\n    condition     = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0\n    error_message = \"The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length.\"\n  }\n}\n\nvariable \"label_key_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of the `tags` keys (label names) for tags generated by this module.\n    Does not affect keys of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper`.\n    Default value: `title`.\n  EOT\n\n  validation {\n    condition     = var.label_key_case == null ? true : contains([\"lower\", \"title\", \"upper\"], var.label_key_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n}\n\nvariable \"label_value_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of ID elements (labels) as included in `id`,\n    set as tag values, and output by this module individually.\n    Does not affect values of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper` and `none` (no transformation).\n    Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs.\n    Default value: `lower`.\n  EOT\n\n  validation {\n    condition     = var.label_value_case == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.label_value_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"descriptor_formats\" {\n  type        = any\n  default     = {}\n  description = <<-EOT\n    Describe additional descriptors to be output in the `descriptors` output map.\n    Map of maps. Keys are names of descriptors. Values are maps of the form\n    `{\n       format = string\n       labels = list(string)\n    }`\n    (Type is `any` so the map values can later be enhanced to provide additional options.)\n    `format` is a Terraform format string to be passed to the `format()` function.\n    `labels` is a list of labels, in order, to pass to `format()` function.\n    Label values will be normalized before being passed to `format()` so they will be\n    identical to how they appear in `id`.\n    Default is `{}` (`descriptors` output will be empty).\n    EOT\n}\n\n#### End of copy of cloudposse/terraform-null-label/variables.tf\n"
  },
  {
    "path": "enhanced-monitoring.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html\n# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_instance#monitoring_role_arn\n\nmodule \"enhanced_monitoring_label\" {\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\"\n\n  enabled    = module.this.enabled && var.enhanced_monitoring_role_enabled\n  attributes = var.enhanced_monitoring_attributes\n\n  context = module.this.context\n}\n\n# Create IAM role for enhanced monitoring\nresource \"aws_iam_role\" \"enhanced_monitoring\" {\n  count              = module.this.enabled && var.enhanced_monitoring_role_enabled ? 1 : 0\n  name               = module.enhanced_monitoring_label.id\n  assume_role_policy = join(\"\", data.aws_iam_policy_document.enhanced_monitoring[*].json)\n  tags               = module.enhanced_monitoring_label.tags\n}\n\n# Attach Amazon's managed policy for RDS enhanced monitoring\nresource \"aws_iam_role_policy_attachment\" \"enhanced_monitoring\" {\n  count      = module.this.enabled && var.enhanced_monitoring_role_enabled ? 1 : 0\n  role       = join(\"\", aws_iam_role.enhanced_monitoring[*].name)\n  policy_arn = \"arn:${local.partition}:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole\"\n}\n\n# Allow RDS monitoring to assume the enhanced monitoring role\ndata \"aws_iam_policy_document\" \"enhanced_monitoring\" {\n  count = module.this.enabled && var.enhanced_monitoring_role_enabled ? 1 : 0\n\n  statement {\n    actions = [\n      \"sts:AssumeRole\"\n    ]\n\n    effect = \"Allow\"\n\n    principals {\n      type        = \"Service\"\n      identifiers = [\"monitoring.rds.amazonaws.com\"]\n    }\n  }\n}\n"
  },
  {
    "path": "examples/basic/main.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterParameterGroup.html\n\nprovider \"aws\" {\n  region = \"us-west-1\"\n}\n\nmodule \"rds_cluster_aurora_postgres\" {\n  source          = \"../../\"\n  name            = \"postgres\"\n  engine          = \"aurora-postgresql\"\n  cluster_family  = \"aurora-postgresql9.6\"\n  cluster_size    = 2\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  db_port         = 5432\n  instance_type   = \"db.r4.large\"\n  vpc_id          = \"vpc-xxxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n}\n"
  },
  {
    "path": "examples/basic/outputs.tf",
    "content": "output \"name\" {\n  value       = module.rds_cluster_aurora_postgres.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_postgres.master_username\n  description = \"Username for the master DB user\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_postgres.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_postgres.arn\n  description = \"Amazon Resource Name (ARN) of cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_postgres.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_postgres.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_postgres.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_postgres.replicas_host\n  description = \"Replicas hostname\"\n}\n"
  },
  {
    "path": "examples/complete/context.tf",
    "content": "#\n# ONLY EDIT THIS FILE IN github.com/cloudposse/terraform-null-label\n# All other instances of this file should be a copy of that one\n#\n#\n# Copy this file from https://github.com/cloudposse/terraform-null-label/blob/master/exports/context.tf\n# and then place it in your Terraform module to automatically get\n# Cloud Posse's standard configuration inputs suitable for passing\n# to Cloud Posse modules.\n#\n# curl -sL https://raw.githubusercontent.com/cloudposse/terraform-null-label/master/exports/context.tf -o context.tf\n#\n# Modules should access the whole context as `module.this.context`\n# to get the input variables with nulls for defaults,\n# for example `context = module.this.context`,\n# and access individual variables as `module.this.<var>`,\n# with final values filled in.\n#\n# For example, when using defaults, `module.this.context.delimiter`\n# will be null, and `module.this.delimiter` will be `-` (hyphen).\n#\n\nmodule \"this\" {\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\" # requires Terraform >= 0.13.0\n\n  enabled             = var.enabled\n  namespace           = var.namespace\n  tenant              = var.tenant\n  environment         = var.environment\n  stage               = var.stage\n  name                = var.name\n  delimiter           = var.delimiter\n  attributes          = var.attributes\n  tags                = var.tags\n  additional_tag_map  = var.additional_tag_map\n  label_order         = var.label_order\n  regex_replace_chars = var.regex_replace_chars\n  id_length_limit     = var.id_length_limit\n  label_key_case      = var.label_key_case\n  label_value_case    = var.label_value_case\n  descriptor_formats  = var.descriptor_formats\n  labels_as_tags      = var.labels_as_tags\n\n  context = var.context\n}\n\n# Copy contents of cloudposse/terraform-null-label/variables.tf here\n\nvariable \"context\" {\n  type = any\n  default = {\n    enabled             = true\n    namespace           = null\n    tenant              = null\n    environment         = null\n    stage               = null\n    name                = null\n    delimiter           = null\n    attributes          = []\n    tags                = {}\n    additional_tag_map  = {}\n    regex_replace_chars = null\n    label_order         = []\n    id_length_limit     = null\n    label_key_case      = null\n    label_value_case    = null\n    descriptor_formats  = {}\n    # Note: we have to use [] instead of null for unset lists due to\n    # https://github.com/hashicorp/terraform/issues/28137\n    # which was not fixed until Terraform 1.0.0,\n    # but we want the default to be all the labels in `label_order`\n    # and we want users to be able to prevent all tag generation\n    # by setting `labels_as_tags` to `[]`, so we need\n    # a different sentinel to indicate \"default\"\n    labels_as_tags = [\"unset\"]\n  }\n  description = <<-EOT\n    Single object for setting entire context at once.\n    See description of individual variables for details.\n    Leave string and numeric variables as `null` to use default value.\n    Individual variable settings (non-null) override settings in context object,\n    except for attributes, tags, and additional_tag_map, which are merged.\n  EOT\n\n  validation {\n    condition     = lookup(var.context, \"label_key_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\"], var.context[\"label_key_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n\n  validation {\n    condition     = lookup(var.context, \"label_value_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.context[\"label_value_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"enabled\" {\n  type        = bool\n  default     = null\n  description = \"Set to false to prevent the module from creating any resources\"\n}\n\nvariable \"namespace\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique\"\n}\n\nvariable \"tenant\" {\n  type        = string\n  default     = null\n  description = \"ID element _(Rarely used, not included by default)_. A customer identifier, indicating who this instance of a resource is for\"\n}\n\nvariable \"environment\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'\"\n}\n\nvariable \"stage\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'\"\n}\n\nvariable \"name\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.\n    This is the only ID element not also included as a `tag`.\n    The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input.\n    EOT\n}\n\nvariable \"delimiter\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Delimiter to be used between ID elements.\n    Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all.\n  EOT\n}\n\nvariable \"attributes\" {\n  type        = list(string)\n  default     = []\n  description = <<-EOT\n    ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,\n    in the order they appear in the list. New attributes are appended to the\n    end of the list. The elements of the list are joined by the `delimiter`\n    and treated as a single ID element.\n    EOT\n}\n\nvariable \"labels_as_tags\" {\n  type        = set(string)\n  default     = [\"default\"]\n  description = <<-EOT\n    Set of labels (ID elements) to include as tags in the `tags` output.\n    Default is to include all labels.\n    Tags with empty values will not be included in the `tags` output.\n    Set to `[]` to suppress all generated tags.\n    **Notes:**\n      The value of the `name` tag, if included, will be the `id`, not the `name`.\n      Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be\n      changed in later chained modules. Attempts to change it will be silently ignored.\n    EOT\n}\n\nvariable \"tags\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).\n    Neither the tag keys nor the tag values will be modified by this module.\n    EOT\n}\n\nvariable \"additional_tag_map\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.\n    This is for some rare cases where resources want additional configuration of tags\n    and therefore take a list of maps with tag key, value, and additional configuration.\n    EOT\n}\n\nvariable \"label_order\" {\n  type        = list(string)\n  default     = null\n  description = <<-EOT\n    The order in which the labels (ID elements) appear in the `id`.\n    Defaults to [\"namespace\", \"environment\", \"stage\", \"name\", \"attributes\"].\n    You can omit any of the 6 labels (\"tenant\" is the 6th), but at least one must be present.\n    EOT\n}\n\nvariable \"regex_replace_chars\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Terraform regular expression (regex) string.\n    Characters matching the regex will be removed from the ID elements.\n    If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits.\n  EOT\n}\n\nvariable \"id_length_limit\" {\n  type        = number\n  default     = null\n  description = <<-EOT\n    Limit `id` to this many characters (minimum 6).\n    Set to `0` for unlimited length.\n    Set to `null` for keep the existing setting, which defaults to `0`.\n    Does not affect `id_full`.\n  EOT\n  validation {\n    condition     = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0\n    error_message = \"The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length.\"\n  }\n}\n\nvariable \"label_key_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of the `tags` keys (label names) for tags generated by this module.\n    Does not affect keys of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper`.\n    Default value: `title`.\n  EOT\n\n  validation {\n    condition     = var.label_key_case == null ? true : contains([\"lower\", \"title\", \"upper\"], var.label_key_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n}\n\nvariable \"label_value_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of ID elements (labels) as included in `id`,\n    set as tag values, and output by this module individually.\n    Does not affect values of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper` and `none` (no transformation).\n    Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs.\n    Default value: `lower`.\n  EOT\n\n  validation {\n    condition     = var.label_value_case == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.label_value_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"descriptor_formats\" {\n  type        = any\n  default     = {}\n  description = <<-EOT\n    Describe additional descriptors to be output in the `descriptors` output map.\n    Map of maps. Keys are names of descriptors. Values are maps of the form\n    `{\n       format = string\n       labels = list(string)\n    }`\n    (Type is `any` so the map values can later be enhanced to provide additional options.)\n    `format` is a Terraform format string to be passed to the `format()` function.\n    `labels` is a list of labels, in order, to pass to `format()` function.\n    Label values will be normalized before being passed to `format()` so they will be\n    identical to how they appear in `id`.\n    Default is `{}` (`descriptors` output will be empty).\n    EOT\n}\n\n#### End of copy of cloudposse/terraform-null-label/variables.tf\n"
  },
  {
    "path": "examples/complete/fixtures.us-east-2.tfvars",
    "content": "region = \"us-east-2\"\n\navailability_zones = [\"us-east-2a\", \"us-east-2b\"]\n\nnamespace = \"eg\"\n\nstage = \"test\"\n\nname = \"rds-cluster\"\n\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html#Concepts.DBInstanceClass.SupportAurora\ninstance_type = \"db.t3.medium\"\n\ncluster_family = \"aurora-mysql8.0\"\n\nengine = \"aurora-mysql\"\n\nengine_mode = \"provisioned\"\n\ncluster_size = 1\n\ndeletion_protection = false\n\nautoscaling_enabled = false\n\ndb_name = \"test_db\"\n\nadmin_user = \"admin\"\n\nadmin_password = \"admin_password\"\n\nenhanced_monitoring_role_enabled = true\n\nrds_monitoring_interval = 30\n\nintra_security_group_traffic_enabled = true\n"
  },
  {
    "path": "examples/complete/main.tf",
    "content": "provider \"aws\" {\n  region = var.region\n}\n\nmodule \"vpc\" {\n  source  = \"cloudposse/vpc/aws\"\n  version = \"2.2.0\"\n\n  ipv4_primary_cidr_block = \"172.16.0.0/16\"\n\n  context = module.this.context\n}\n\nmodule \"subnets\" {\n  source  = \"cloudposse/dynamic-subnets/aws\"\n  version = \"2.4.2\"\n\n  availability_zones   = var.availability_zones\n  vpc_id               = module.vpc.vpc_id\n  igw_id               = [module.vpc.igw_id]\n  ipv4_cidr_block      = [module.vpc.vpc_cidr_block]\n  nat_gateway_enabled  = false\n  nat_instance_enabled = false\n\n  context = module.this.context\n}\n\nmodule \"rds_cluster\" {\n  source = \"../../\"\n\n  engine                               = var.engine\n  engine_mode                          = var.engine_mode\n  cluster_family                       = var.cluster_family\n  cluster_size                         = var.cluster_size\n  admin_user                           = var.admin_user\n  admin_password                       = var.admin_password\n  db_name                              = var.db_name\n  instance_type                        = var.instance_type\n  vpc_id                               = module.vpc.vpc_id\n  subnets                              = module.subnets.private_subnet_ids\n  security_groups                      = [module.vpc.vpc_default_security_group_id]\n  deletion_protection                  = var.deletion_protection\n  autoscaling_enabled                  = var.autoscaling_enabled\n  storage_type                         = var.storage_type\n  iops                                 = var.iops\n  allocated_storage                    = var.allocated_storage\n  intra_security_group_traffic_enabled = var.intra_security_group_traffic_enabled\n\n  cluster_parameters = [\n    {\n      name         = \"character_set_client\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_connection\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_database\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_results\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_server\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"collation_connection\"\n      value        = \"utf8_bin\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"collation_server\"\n      value        = \"utf8_bin\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"lower_case_table_names\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"skip-character-set-client-handshake\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    }\n  ]\n\n  context = module.this.context\n}\n"
  },
  {
    "path": "examples/complete/outputs.tf",
    "content": "output \"database_name\" {\n  value       = module.rds_cluster.database_name\n  description = \"Database name\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster.arn\n  description = \"Amazon Resource Name (ARN) of the cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster.replicas_host\n  description = \"Replicas hostname\"\n}\n\noutput \"dbi_resource_ids\" {\n  value       = module.rds_cluster.dbi_resource_ids\n  description = \"List of the region-unique, immutable identifiers for the DB instances in the cluster\"\n}\n\noutput \"cluster_resource_id\" {\n  value       = module.rds_cluster.cluster_resource_id\n  description = \"The region-unique, immutable identifie of the cluster\"\n}\n\noutput \"public_subnet_cidrs\" {\n  value       = module.subnets.public_subnet_cidrs\n  description = \"Public subnet CIDR blocks\"\n}\n\noutput \"private_subnet_cidrs\" {\n  value       = module.subnets.private_subnet_cidrs\n  description = \"Private subnet CIDR blocks\"\n}\n\noutput \"vpc_cidr\" {\n  value       = module.vpc.vpc_cidr_block\n  description = \"VPC CIDR\"\n}\n\noutput \"security_group_id\" {\n  value       = module.rds_cluster.security_group_id\n  description = \"Security Group ID\"\n}\n\noutput \"security_group_arn\" {\n  value       = module.rds_cluster.security_group_arn\n  description = \"Security Group ARN\"\n}\n\noutput \"security_group_name\" {\n  value       = module.rds_cluster.security_group_name\n  description = \"Security Group name\"\n}\n"
  },
  {
    "path": "examples/complete/variables.tf",
    "content": "variable \"region\" {\n  type        = string\n  description = \"AWS region\"\n}\n\nvariable \"availability_zones\" {\n  type        = list(string)\n  description = \"Availability zones\"\n}\n\nvariable \"instance_type\" {\n  type        = string\n  description = \"Instance type to use\"\n}\n\nvariable \"cluster_size\" {\n  type        = number\n  description = \"Number of DB instances to create in the cluster\"\n}\n\nvariable \"db_name\" {\n  type        = string\n  description = \"Database name\"\n}\n\nvariable \"admin_user\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Username for the master DB user\"\n}\n\nvariable \"admin_password\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Password for the master DB user\"\n}\n\nvariable \"cluster_family\" {\n  type        = string\n  description = \"The family of the DB cluster parameter group\"\n}\n\nvariable \"engine\" {\n  type        = string\n  description = \"The name of the database engine to be used for this DB cluster. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql`\"\n}\n\nvariable \"engine_mode\" {\n  type        = string\n  description = \"The database engine mode. Valid values: `parallelquery`, `provisioned`, `serverless`\"\n}\n\nvariable \"deletion_protection\" {\n  type        = bool\n  description = \"If the DB instance should have deletion protection enabled\"\n}\n\nvariable \"autoscaling_enabled\" {\n  type        = bool\n  description = \"Whether to enable cluster autoscaling\"\n}\n\nvariable \"enhanced_monitoring_role_enabled\" {\n  type        = bool\n  description = \"A boolean flag to enable/disable the creation of the enhanced monitoring IAM role. If set to `false`, the module will not create a new role and will use `rds_monitoring_role_arn` for enhanced monitoring\"\n}\n\nvariable \"rds_monitoring_interval\" {\n  type        = number\n  description = \"The interval, in seconds, between points when enhanced monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid Values: 0, 1, 5, 10, 15, 30, 60\"\n}\n\nvariable \"storage_type\" {\n  type        = string\n  description = \"One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD)\"\n  default     = null\n}\n\nvariable \"iops\" {\n  type        = number\n  description = \"The amount of provisioned IOPS. Setting this implies a storage_type of 'io1'. This setting is required to create a Multi-AZ DB cluster. Check TF docs for values based on db engine\"\n  default     = null\n}\n\nvariable \"allocated_storage\" {\n  type        = number\n  description = \"The allocated storage in GBs\"\n  default     = null\n}\n\nvariable \"intra_security_group_traffic_enabled\" {\n  type        = bool\n  default     = false\n  description = \"Whether to allow traffic between resources inside the database's security group.\"\n}\n"
  },
  {
    "path": "examples/complete/versions.tf",
    "content": "terraform {\n  required_version = \">= 1.1.0\"\n\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \">= 4.17.0\"\n    }\n    null = {\n      source  = \"hashicorp/null\"\n      version = \">= 2.0\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/enhanced_monitoring/main.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterParameterGroup.html\n\nprovider \"aws\" {\n  region = \"us-west-1\"\n}\n\n# create IAM role for monitoring\nresource \"aws_iam_role\" \"enhanced_monitoring\" {\n  name               = \"rds-cluster-example-1\"\n  assume_role_policy = data.aws_iam_policy_document.enhanced_monitoring.json\n}\n\n# Attach Amazon's managed policy for RDS enhanced monitoring\nresource \"aws_iam_role_policy_attachment\" \"enhanced_monitoring\" {\n  role       = aws_iam_role.enhanced_monitoring.name\n  policy_arn = \"arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole\"\n}\n\n# allow rds to assume this role\ndata \"aws_iam_policy_document\" \"enhanced_monitoring\" {\n  statement {\n    actions = [\n      \"sts:AssumeRole\",\n    ]\n\n    effect = \"Allow\"\n\n    principals {\n      type        = \"Service\"\n      identifiers = [\"monitoring.rds.amazonaws.com\"]\n    }\n  }\n}\n\nmodule \"rds_cluster_aurora_postgres\" {\n  source          = \"../../\"\n  engine          = \"aurora-postgresql\"\n  cluster_family  = \"aurora-postgresql9.6\"\n  cluster_size    = 2\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  name            = \"db\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  db_port         = 5432\n  instance_type   = \"db.r4.large\"\n  vpc_id          = \"vpc-xxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n\n  # enable monitoring every 30 seconds\n  rds_monitoring_interval = 30\n\n  # reference iam role created above\n  rds_monitoring_role_arn = aws_iam_role.enhanced_monitoring.arn\n}\n"
  },
  {
    "path": "examples/enhanced_monitoring/outputs.tf",
    "content": "output \"name\" {\n  value       = module.rds_cluster_aurora_postgres.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_postgres.master_username\n  description = \"Username for the master DB user\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_postgres.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_postgres.arn\n  description = \"Amazon Resource Name (ARN) of cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_postgres.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_postgres.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_postgres.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_postgres.replicas_host\n  description = \"Replicas hostname\"\n}\n"
  },
  {
    "path": "examples/postgres/context.tf",
    "content": "#\n# ONLY EDIT THIS FILE IN github.com/cloudposse/terraform-null-label\n# All other instances of this file should be a copy of that one\n#\n#\n# Copy this file from https://github.com/cloudposse/terraform-null-label/blob/master/exports/context.tf\n# and then place it in your Terraform module to automatically get\n# Cloud Posse's standard configuration inputs suitable for passing\n# to Cloud Posse modules.\n#\n# curl -sL https://raw.githubusercontent.com/cloudposse/terraform-null-label/master/exports/context.tf -o context.tf\n#\n# Modules should access the whole context as `module.this.context`\n# to get the input variables with nulls for defaults,\n# for example `context = module.this.context`,\n# and access individual variables as `module.this.<var>`,\n# with final values filled in.\n#\n# For example, when using defaults, `module.this.context.delimiter`\n# will be null, and `module.this.delimiter` will be `-` (hyphen).\n#\n\nmodule \"this\" {\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\" # requires Terraform >= 0.13.0\n\n  enabled             = var.enabled\n  namespace           = var.namespace\n  tenant              = var.tenant\n  environment         = var.environment\n  stage               = var.stage\n  name                = var.name\n  delimiter           = var.delimiter\n  attributes          = var.attributes\n  tags                = var.tags\n  additional_tag_map  = var.additional_tag_map\n  label_order         = var.label_order\n  regex_replace_chars = var.regex_replace_chars\n  id_length_limit     = var.id_length_limit\n  label_key_case      = var.label_key_case\n  label_value_case    = var.label_value_case\n  descriptor_formats  = var.descriptor_formats\n  labels_as_tags      = var.labels_as_tags\n\n  context = var.context\n}\n\n# Copy contents of cloudposse/terraform-null-label/variables.tf here\n\nvariable \"context\" {\n  type = any\n  default = {\n    enabled             = true\n    namespace           = null\n    tenant              = null\n    environment         = null\n    stage               = null\n    name                = null\n    delimiter           = null\n    attributes          = []\n    tags                = {}\n    additional_tag_map  = {}\n    regex_replace_chars = null\n    label_order         = []\n    id_length_limit     = null\n    label_key_case      = null\n    label_value_case    = null\n    descriptor_formats  = {}\n    # Note: we have to use [] instead of null for unset lists due to\n    # https://github.com/hashicorp/terraform/issues/28137\n    # which was not fixed until Terraform 1.0.0,\n    # but we want the default to be all the labels in `label_order`\n    # and we want users to be able to prevent all tag generation\n    # by setting `labels_as_tags` to `[]`, so we need\n    # a different sentinel to indicate \"default\"\n    labels_as_tags = [\"unset\"]\n  }\n  description = <<-EOT\n    Single object for setting entire context at once.\n    See description of individual variables for details.\n    Leave string and numeric variables as `null` to use default value.\n    Individual variable settings (non-null) override settings in context object,\n    except for attributes, tags, and additional_tag_map, which are merged.\n  EOT\n\n  validation {\n    condition     = lookup(var.context, \"label_key_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\"], var.context[\"label_key_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n\n  validation {\n    condition     = lookup(var.context, \"label_value_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.context[\"label_value_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"enabled\" {\n  type        = bool\n  default     = null\n  description = \"Set to false to prevent the module from creating any resources\"\n}\n\nvariable \"namespace\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique\"\n}\n\nvariable \"tenant\" {\n  type        = string\n  default     = null\n  description = \"ID element _(Rarely used, not included by default)_. A customer identifier, indicating who this instance of a resource is for\"\n}\n\nvariable \"environment\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'\"\n}\n\nvariable \"stage\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'\"\n}\n\nvariable \"name\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.\n    This is the only ID element not also included as a `tag`.\n    The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input.\n    EOT\n}\n\nvariable \"delimiter\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Delimiter to be used between ID elements.\n    Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all.\n  EOT\n}\n\nvariable \"attributes\" {\n  type        = list(string)\n  default     = []\n  description = <<-EOT\n    ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,\n    in the order they appear in the list. New attributes are appended to the\n    end of the list. The elements of the list are joined by the `delimiter`\n    and treated as a single ID element.\n    EOT\n}\n\nvariable \"labels_as_tags\" {\n  type        = set(string)\n  default     = [\"default\"]\n  description = <<-EOT\n    Set of labels (ID elements) to include as tags in the `tags` output.\n    Default is to include all labels.\n    Tags with empty values will not be included in the `tags` output.\n    Set to `[]` to suppress all generated tags.\n    **Notes:**\n      The value of the `name` tag, if included, will be the `id`, not the `name`.\n      Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be\n      changed in later chained modules. Attempts to change it will be silently ignored.\n    EOT\n}\n\nvariable \"tags\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).\n    Neither the tag keys nor the tag values will be modified by this module.\n    EOT\n}\n\nvariable \"additional_tag_map\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.\n    This is for some rare cases where resources want additional configuration of tags\n    and therefore take a list of maps with tag key, value, and additional configuration.\n    EOT\n}\n\nvariable \"label_order\" {\n  type        = list(string)\n  default     = null\n  description = <<-EOT\n    The order in which the labels (ID elements) appear in the `id`.\n    Defaults to [\"namespace\", \"environment\", \"stage\", \"name\", \"attributes\"].\n    You can omit any of the 6 labels (\"tenant\" is the 6th), but at least one must be present.\n    EOT\n}\n\nvariable \"regex_replace_chars\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Terraform regular expression (regex) string.\n    Characters matching the regex will be removed from the ID elements.\n    If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits.\n  EOT\n}\n\nvariable \"id_length_limit\" {\n  type        = number\n  default     = null\n  description = <<-EOT\n    Limit `id` to this many characters (minimum 6).\n    Set to `0` for unlimited length.\n    Set to `null` for keep the existing setting, which defaults to `0`.\n    Does not affect `id_full`.\n  EOT\n  validation {\n    condition     = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0\n    error_message = \"The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length.\"\n  }\n}\n\nvariable \"label_key_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of the `tags` keys (label names) for tags generated by this module.\n    Does not affect keys of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper`.\n    Default value: `title`.\n  EOT\n\n  validation {\n    condition     = var.label_key_case == null ? true : contains([\"lower\", \"title\", \"upper\"], var.label_key_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n}\n\nvariable \"label_value_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of ID elements (labels) as included in `id`,\n    set as tag values, and output by this module individually.\n    Does not affect values of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper` and `none` (no transformation).\n    Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs.\n    Default value: `lower`.\n  EOT\n\n  validation {\n    condition     = var.label_value_case == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.label_value_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"descriptor_formats\" {\n  type        = any\n  default     = {}\n  description = <<-EOT\n    Describe additional descriptors to be output in the `descriptors` output map.\n    Map of maps. Keys are names of descriptors. Values are maps of the form\n    `{\n       format = string\n       labels = list(string)\n    }`\n    (Type is `any` so the map values can later be enhanced to provide additional options.)\n    `format` is a Terraform format string to be passed to the `format()` function.\n    `labels` is a list of labels, in order, to pass to `format()` function.\n    Label values will be normalized before being passed to `format()` so they will be\n    identical to how they appear in `id`.\n    Default is `{}` (`descriptors` output will be empty).\n    EOT\n}\n\n#### End of copy of cloudposse/terraform-null-label/variables.tf\n"
  },
  {
    "path": "examples/postgres/fixtures.us-east-2.tfvars",
    "content": "region = \"us-east-2\"\n\navailability_zones = [\"us-east-2a\", \"us-east-2b\", \"us-east-2c\"]\n\nnamespace = \"eg\"\n\nstage = \"test\"\n\nname = \"rds-cluster\"\n\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html#Concepts.DBInstanceClass.SupportAurora\n# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster_instance\ninstance_type = \"db.t3.large\"\n\ncluster_family = \"aurora-postgresql15\"\n\nengine_version = \"15.13\"\n\nengine = \"aurora-postgresql\"\n\nengine_mode = \"provisioned\"\n\ncluster_size = 1\n\ndeletion_protection = false\n\nautoscaling_enabled = false\n\ndb_name = \"test_db\"\n\nadmin_user = \"admin_test\"\n\nadmin_password = \"admin_password\"\n\nenhanced_monitoring_role_enabled = true\n\nrds_monitoring_interval = 30\n"
  },
  {
    "path": "examples/postgres/main.tf",
    "content": "provider \"aws\" {\n  region = var.region\n}\n\nmodule \"vpc\" {\n  source  = \"cloudposse/vpc/aws\"\n  version = \"2.2.0\"\n\n  ipv4_primary_cidr_block = \"172.16.0.0/16\"\n\n  context = module.this.context\n}\n\nmodule \"subnets\" {\n  source  = \"cloudposse/dynamic-subnets/aws\"\n  version = \"2.4.2\"\n\n  availability_zones   = var.availability_zones\n  vpc_id               = module.vpc.vpc_id\n  igw_id               = [module.vpc.igw_id]\n  ipv4_cidr_block      = [module.vpc.vpc_cidr_block]\n  nat_gateway_enabled  = false\n  nat_instance_enabled = false\n\n  context = module.this.context\n}\n\nmodule \"rds_cluster\" {\n  source = \"../../\"\n\n  engine                    = var.engine\n  engine_mode               = var.engine_mode\n  engine_version            = var.engine_version\n  cluster_family            = var.cluster_family\n  cluster_size              = contains(regex(\"^(?:.*(aurora))?.*$\", var.engine), \"aurora\") ? var.cluster_size : 0\n  admin_user                = var.admin_user\n  admin_password            = var.admin_password\n  db_name                   = var.db_name\n  instance_type             = var.instance_type\n  db_cluster_instance_class = var.db_cluster_instance_class\n  vpc_id                    = module.vpc.vpc_id\n  subnets                   = module.subnets.private_subnet_ids\n  security_groups           = [module.vpc.vpc_default_security_group_id]\n  deletion_protection       = var.deletion_protection\n  autoscaling_enabled       = var.autoscaling_enabled\n  storage_type              = var.storage_type\n  iops                      = var.iops\n  allocated_storage         = var.allocated_storage\n\n  context = module.this.context\n}\n"
  },
  {
    "path": "examples/postgres/outputs.tf",
    "content": "output \"database_name\" {\n  value       = module.rds_cluster.database_name\n  description = \"Database name\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster.arn\n  description = \"Amazon Resource Name (ARN) of the cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster.replicas_host\n  description = \"Replicas hostname\"\n}\n\noutput \"dbi_resource_ids\" {\n  value       = module.rds_cluster.dbi_resource_ids\n  description = \"List of the region-unique, immutable identifiers for the DB instances in the cluster\"\n}\n\noutput \"cluster_resource_id\" {\n  value       = module.rds_cluster.cluster_resource_id\n  description = \"The region-unique, immutable identifie of the cluster\"\n}\n\noutput \"public_subnet_cidrs\" {\n  value       = module.subnets.public_subnet_cidrs\n  description = \"Public subnet CIDR blocks\"\n}\n\noutput \"private_subnet_cidrs\" {\n  value       = module.subnets.private_subnet_cidrs\n  description = \"Private subnet CIDR blocks\"\n}\n\noutput \"vpc_cidr\" {\n  value       = module.vpc.vpc_cidr_block\n  description = \"VPC CIDR\"\n}\n\noutput \"security_group_id\" {\n  value       = module.rds_cluster.security_group_id\n  description = \"Security Group ID\"\n}\n\noutput \"security_group_arn\" {\n  value       = module.rds_cluster.security_group_arn\n  description = \"Security Group ARN\"\n}\n\noutput \"security_group_name\" {\n  value       = module.rds_cluster.security_group_name\n  description = \"Security Group name\"\n}\n"
  },
  {
    "path": "examples/postgres/variables.tf",
    "content": "variable \"region\" {\n  type        = string\n  description = \"AWS region\"\n}\n\nvariable \"availability_zones\" {\n  type        = list(string)\n  description = \"Availability Zones for the instance\"\n}\n\nvariable \"instance_type\" {\n  type        = string\n  description = \"Instance type to use\"\n}\n\nvariable \"cluster_size\" {\n  type        = number\n  description = \"Number of DB instances to create in the cluster\"\n}\n\nvariable \"db_name\" {\n  type        = string\n  description = \"Database name\"\n}\n\nvariable \"admin_user\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Username for the master DB user\"\n}\n\nvariable \"admin_password\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Password for the master DB user\"\n}\n\nvariable \"cluster_family\" {\n  type        = string\n  description = \"The family of the DB cluster parameter group\"\n}\n\nvariable \"engine\" {\n  type        = string\n  description = \"The name of the database engine to be used for this DB cluster. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql`\"\n}\n\nvariable \"engine_mode\" {\n  type        = string\n  description = \"The database engine mode. Valid values: `parallelquery`, `provisioned`, `serverless`\"\n}\n\nvariable \"engine_version\" {\n  type        = string\n  default     = \"\"\n  description = \"The version of the database engine to use. See `aws rds describe-db-engine-versions` \"\n}\n\nvariable \"deletion_protection\" {\n  type        = bool\n  description = \"If the DB instance should have deletion protection enabled\"\n}\n\nvariable \"autoscaling_enabled\" {\n  type        = bool\n  description = \"Whether to enable cluster autoscaling\"\n}\n\nvariable \"enhanced_monitoring_role_enabled\" {\n  type        = bool\n  description = \"A boolean flag to enable/disable the creation of the enhanced monitoring IAM role. If set to `false`, the module will not create a new role and will use `rds_monitoring_role_arn` for enhanced monitoring\"\n}\n\nvariable \"rds_monitoring_interval\" {\n  type        = number\n  description = \"The interval, in seconds, between points when enhanced monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid Values: 0, 1, 5, 10, 15, 30, 60\"\n}\n\nvariable \"storage_type\" {\n  type        = string\n  description = \"One of 'standard' (magnetic), 'gp2' (general purpose SSD), or 'io1' (provisioned IOPS SSD)\"\n  default     = null\n}\n\nvariable \"iops\" {\n  type        = number\n  description = \"The amount of provisioned IOPS. Setting this implies a storage_type of 'io1'. This setting is required to create a Multi-AZ DB cluster. Check TF docs for values based on db engine\"\n  default     = null\n}\n\nvariable \"allocated_storage\" {\n  type        = number\n  description = \"The allocated storage in GBs\"\n  default     = null\n}\n\nvariable \"db_cluster_instance_class\" {\n  type        = string\n  default     = null\n  description = \"This setting is required to create a Multi-AZ RDS cluster (not Aurora)\"\n}\n"
  },
  {
    "path": "examples/postgres/versions.tf",
    "content": "terraform {\n  required_version = \">= 1.1.0\"\n\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \">= 4.17.0\"\n    }\n    null = {\n      source  = \"hashicorp/null\"\n      version = \">= 2.0\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/serverless_mysql/main.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterParameterGroup.html\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.20180206.html\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html\n\nprovider \"aws\" {\n  region = \"us-west-1\"\n}\n\nmodule \"rds_cluster_aurora_mysql_serverless\" {\n  source               = \"../../\"\n  namespace            = \"eg\"\n  stage                = \"dev\"\n  name                 = \"db\"\n  engine               = \"aurora\"\n  engine_mode          = \"serverless\"\n  cluster_family       = \"aurora5.6\"\n  cluster_size         = 0\n  admin_user           = \"admin1\"\n  admin_password       = \"Test123456789\"\n  db_name              = \"dbname\"\n  db_port              = 3306\n  instance_type        = \"db.t2.small\"\n  vpc_id               = \"vpc-xxxxxxxx\"\n  security_groups      = [\"sg-xxxxxxxx\"]\n  subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id              = \"Zxxxxxxxx\"\n  enable_http_endpoint = true\n\n  scaling_configuration = [\n    {\n      auto_pause               = true\n      max_capacity             = 256\n      min_capacity             = 2\n      seconds_until_auto_pause = 300\n    }\n  ]\n}\n"
  },
  {
    "path": "examples/serverless_mysql/outputs.tf",
    "content": "output \"name\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.master_username\n  description = \"Username for the master DB user\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.arn\n  description = \"Amazon Resource Name (ARN) of cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.replicas_host\n  description = \"Replicas hostname\"\n}\n"
  },
  {
    "path": "examples/serverless_mysql57/main.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterParameterGroup.html\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.serverless_2_07_01.html\n# https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html\n\nprovider \"aws\" {\n  region = \"us-west-1\"\n}\n\nmodule \"rds_cluster_aurora_mysql_serverless\" {\n  source               = \"../..\"\n  namespace            = \"eg\"\n  stage                = \"dev\"\n  name                 = \"db\"\n  engine               = \"aurora-mysql\"\n  engine_mode          = \"serverless\"\n  engine_version       = \"5.7.mysql_aurora.2.07.1\"\n  cluster_family       = \"aurora-mysql5.7\"\n  cluster_size         = 0\n  admin_user           = \"admin1\"\n  admin_password       = \"Test123456789\"\n  db_name              = \"dbname\"\n  db_port              = 3306\n  vpc_id               = \"vpc-xxxxxxxx\"\n  security_groups      = [\"sg-xxxxxxxx\"]\n  subnets              = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id              = \"Zxxxxxxxx\"\n  enable_http_endpoint = true\n\n  scaling_configuration = [\n    {\n      auto_pause               = true\n      max_capacity             = 16\n      min_capacity             = 1\n      seconds_until_auto_pause = 300\n      timeout_action           = \"ForceApplyCapacityChange\"\n    }\n  ]\n}\n"
  },
  {
    "path": "examples/serverless_mysql57/outputs.tf",
    "content": "output \"name\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.master_username\n  description = \"Username for the master DB user\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.arn\n  description = \"Amazon Resource Name (ARN) of cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_mysql_serverless.replicas_host\n  description = \"Replicas hostname\"\n}\n"
  },
  {
    "path": "examples/serverlessv2_postgres/context.tf",
    "content": "#\n# ONLY EDIT THIS FILE IN github.com/cloudposse/terraform-null-label\n# All other instances of this file should be a copy of that one\n#\n#\n# Copy this file from https://github.com/cloudposse/terraform-null-label/blob/master/exports/context.tf\n# and then place it in your Terraform module to automatically get\n# Cloud Posse's standard configuration inputs suitable for passing\n# to Cloud Posse modules.\n#\n# curl -sL https://raw.githubusercontent.com/cloudposse/terraform-null-label/master/exports/context.tf -o context.tf\n#\n# Modules should access the whole context as `module.this.context`\n# to get the input variables with nulls for defaults,\n# for example `context = module.this.context`,\n# and access individual variables as `module.this.<var>`,\n# with final values filled in.\n#\n# For example, when using defaults, `module.this.context.delimiter`\n# will be null, and `module.this.delimiter` will be `-` (hyphen).\n#\n\nmodule \"this\" {\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\" # requires Terraform >= 0.13.0\n\n  enabled             = var.enabled\n  namespace           = var.namespace\n  tenant              = var.tenant\n  environment         = var.environment\n  stage               = var.stage\n  name                = var.name\n  delimiter           = var.delimiter\n  attributes          = var.attributes\n  tags                = var.tags\n  additional_tag_map  = var.additional_tag_map\n  label_order         = var.label_order\n  regex_replace_chars = var.regex_replace_chars\n  id_length_limit     = var.id_length_limit\n  label_key_case      = var.label_key_case\n  label_value_case    = var.label_value_case\n  descriptor_formats  = var.descriptor_formats\n  labels_as_tags      = var.labels_as_tags\n\n  context = var.context\n}\n\n# Copy contents of cloudposse/terraform-null-label/variables.tf here\n\nvariable \"context\" {\n  type = any\n  default = {\n    enabled             = true\n    namespace           = null\n    tenant              = null\n    environment         = null\n    stage               = null\n    name                = null\n    delimiter           = null\n    attributes          = []\n    tags                = {}\n    additional_tag_map  = {}\n    regex_replace_chars = null\n    label_order         = []\n    id_length_limit     = null\n    label_key_case      = null\n    label_value_case    = null\n    descriptor_formats  = {}\n    # Note: we have to use [] instead of null for unset lists due to\n    # https://github.com/hashicorp/terraform/issues/28137\n    # which was not fixed until Terraform 1.0.0,\n    # but we want the default to be all the labels in `label_order`\n    # and we want users to be able to prevent all tag generation\n    # by setting `labels_as_tags` to `[]`, so we need\n    # a different sentinel to indicate \"default\"\n    labels_as_tags = [\"unset\"]\n  }\n  description = <<-EOT\n    Single object for setting entire context at once.\n    See description of individual variables for details.\n    Leave string and numeric variables as `null` to use default value.\n    Individual variable settings (non-null) override settings in context object,\n    except for attributes, tags, and additional_tag_map, which are merged.\n  EOT\n\n  validation {\n    condition     = lookup(var.context, \"label_key_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\"], var.context[\"label_key_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n\n  validation {\n    condition     = lookup(var.context, \"label_value_case\", null) == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.context[\"label_value_case\"])\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"enabled\" {\n  type        = bool\n  default     = null\n  description = \"Set to false to prevent the module from creating any resources\"\n}\n\nvariable \"namespace\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually an abbreviation of your organization name, e.g. 'eg' or 'cp', to help ensure generated IDs are globally unique\"\n}\n\nvariable \"tenant\" {\n  type        = string\n  default     = null\n  description = \"ID element _(Rarely used, not included by default)_. A customer identifier, indicating who this instance of a resource is for\"\n}\n\nvariable \"environment\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT'\"\n}\n\nvariable \"stage\" {\n  type        = string\n  default     = null\n  description = \"ID element. Usually used to indicate role, e.g. 'prod', 'staging', 'source', 'build', 'test', 'deploy', 'release'\"\n}\n\nvariable \"name\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    ID element. Usually the component or solution name, e.g. 'app' or 'jenkins'.\n    This is the only ID element not also included as a `tag`.\n    The \"name\" tag is set to the full `id` string. There is no tag with the value of the `name` input.\n    EOT\n}\n\nvariable \"delimiter\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Delimiter to be used between ID elements.\n    Defaults to `-` (hyphen). Set to `\"\"` to use no delimiter at all.\n  EOT\n}\n\nvariable \"attributes\" {\n  type        = list(string)\n  default     = []\n  description = <<-EOT\n    ID element. Additional attributes (e.g. `workers` or `cluster`) to add to `id`,\n    in the order they appear in the list. New attributes are appended to the\n    end of the list. The elements of the list are joined by the `delimiter`\n    and treated as a single ID element.\n    EOT\n}\n\nvariable \"labels_as_tags\" {\n  type        = set(string)\n  default     = [\"default\"]\n  description = <<-EOT\n    Set of labels (ID elements) to include as tags in the `tags` output.\n    Default is to include all labels.\n    Tags with empty values will not be included in the `tags` output.\n    Set to `[]` to suppress all generated tags.\n    **Notes:**\n      The value of the `name` tag, if included, will be the `id`, not the `name`.\n      Unlike other `null-label` inputs, the initial setting of `labels_as_tags` cannot be\n      changed in later chained modules. Attempts to change it will be silently ignored.\n    EOT\n}\n\nvariable \"tags\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional tags (e.g. `{'BusinessUnit': 'XYZ'}`).\n    Neither the tag keys nor the tag values will be modified by this module.\n    EOT\n}\n\nvariable \"additional_tag_map\" {\n  type        = map(string)\n  default     = {}\n  description = <<-EOT\n    Additional key-value pairs to add to each map in `tags_as_list_of_maps`. Not added to `tags` or `id`.\n    This is for some rare cases where resources want additional configuration of tags\n    and therefore take a list of maps with tag key, value, and additional configuration.\n    EOT\n}\n\nvariable \"label_order\" {\n  type        = list(string)\n  default     = null\n  description = <<-EOT\n    The order in which the labels (ID elements) appear in the `id`.\n    Defaults to [\"namespace\", \"environment\", \"stage\", \"name\", \"attributes\"].\n    You can omit any of the 6 labels (\"tenant\" is the 6th), but at least one must be present.\n    EOT\n}\n\nvariable \"regex_replace_chars\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Terraform regular expression (regex) string.\n    Characters matching the regex will be removed from the ID elements.\n    If not set, `\"/[^a-zA-Z0-9-]/\"` is used to remove all characters other than hyphens, letters and digits.\n  EOT\n}\n\nvariable \"id_length_limit\" {\n  type        = number\n  default     = null\n  description = <<-EOT\n    Limit `id` to this many characters (minimum 6).\n    Set to `0` for unlimited length.\n    Set to `null` for keep the existing setting, which defaults to `0`.\n    Does not affect `id_full`.\n  EOT\n  validation {\n    condition     = var.id_length_limit == null ? true : var.id_length_limit >= 6 || var.id_length_limit == 0\n    error_message = \"The id_length_limit must be >= 6 if supplied (not null), or 0 for unlimited length.\"\n  }\n}\n\nvariable \"label_key_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of the `tags` keys (label names) for tags generated by this module.\n    Does not affect keys of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper`.\n    Default value: `title`.\n  EOT\n\n  validation {\n    condition     = var.label_key_case == null ? true : contains([\"lower\", \"title\", \"upper\"], var.label_key_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`.\"\n  }\n}\n\nvariable \"label_value_case\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Controls the letter case of ID elements (labels) as included in `id`,\n    set as tag values, and output by this module individually.\n    Does not affect values of tags passed in via the `tags` input.\n    Possible values: `lower`, `title`, `upper` and `none` (no transformation).\n    Set this to `title` and set `delimiter` to `\"\"` to yield Pascal Case IDs.\n    Default value: `lower`.\n  EOT\n\n  validation {\n    condition     = var.label_value_case == null ? true : contains([\"lower\", \"title\", \"upper\", \"none\"], var.label_value_case)\n    error_message = \"Allowed values: `lower`, `title`, `upper`, `none`.\"\n  }\n}\n\nvariable \"descriptor_formats\" {\n  type        = any\n  default     = {}\n  description = <<-EOT\n    Describe additional descriptors to be output in the `descriptors` output map.\n    Map of maps. Keys are names of descriptors. Values are maps of the form\n    `{\n       format = string\n       labels = list(string)\n    }`\n    (Type is `any` so the map values can later be enhanced to provide additional options.)\n    `format` is a Terraform format string to be passed to the `format()` function.\n    `labels` is a list of labels, in order, to pass to `format()` function.\n    Label values will be normalized before being passed to `format()` so they will be\n    identical to how they appear in `id`.\n    Default is `{}` (`descriptors` output will be empty).\n    EOT\n}\n\n#### End of copy of cloudposse/terraform-null-label/variables.tf\n"
  },
  {
    "path": "examples/serverlessv2_postgres/fixtures.us-east-2.tfvars",
    "content": "region = \"us-east-2\"\n\navailability_zones = [\"us-east-2a\", \"us-east-2b\"]\n\nnamespace = \"eg\"\n\nstage = \"test\"\n\nname = \"rds-cluster\"\n\nengine = \"aurora-postgresql\"\n\ncluster_family = \"aurora-postgresql15\"\n\nengine_version = \"15.13\"\n\ninstance_type = \"db.serverless\"\n\ncluster_size = 1\n\ndeletion_protection = false\n\nautoscaling_enabled = false\n\ndb_name = \"test_db\"\n\nadmin_user = \"postgres\"\n\nadmin_password = \"admin_password\"\n\nenhanced_monitoring_role_enabled = true\n\nrds_monitoring_interval = 30\n\nmax_capacity = 16\n\nmin_capacity = 0.5\n"
  },
  {
    "path": "examples/serverlessv2_postgres/main.tf",
    "content": "provider \"aws\" {\n  region = var.region\n}\n\nmodule \"vpc\" {\n  source  = \"cloudposse/vpc/aws\"\n  version = \"2.2.0\"\n\n  ipv4_primary_cidr_block = \"172.16.0.0/16\"\n\n  context = module.this.context\n}\n\nmodule \"subnets\" {\n  source  = \"cloudposse/dynamic-subnets/aws\"\n  version = \"2.4.2\"\n\n  availability_zones   = var.availability_zones\n  vpc_id               = module.vpc.vpc_id\n  igw_id               = [module.vpc.igw_id]\n  ipv4_cidr_block      = [module.vpc.vpc_cidr_block]\n  nat_gateway_enabled  = false\n  nat_instance_enabled = false\n\n  context = module.this.context\n}\n\nmodule \"rds_cluster_aurora_serverlessv2_postgres_13\" {\n  source = \"../../\"\n\n  instance_type       = var.instance_type\n  engine              = var.engine\n  cluster_family      = var.cluster_family\n  engine_version      = var.engine_version\n  cluster_size        = var.cluster_size\n  admin_user          = var.admin_user\n  admin_password      = var.admin_password\n  db_name             = var.db_name\n  vpc_id              = module.vpc.vpc_id\n  subnets             = module.subnets.private_subnet_ids\n  security_groups     = [module.vpc.vpc_default_security_group_id]\n  deletion_protection = var.deletion_protection\n  serverlessv2_scaling_configuration = {\n    max_capacity = var.max_capacity\n    min_capacity = var.min_capacity\n  }\n\n  context = module.this.context\n}\n"
  },
  {
    "path": "examples/serverlessv2_postgres/outputs.tf",
    "content": "output \"database_name\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.master_username\n  description = \"Username for the master DB user\"\n  sensitive   = true\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.arn\n  description = \"Amazon Resource Name (ARN) of the cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.replicas_host\n  description = \"Replicas hostname\"\n}\n\noutput \"dbi_resource_ids\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.dbi_resource_ids\n  description = \"List of the region-unique, immutable identifiers for the DB instances in the cluster\"\n}\n\noutput \"cluster_resource_id\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.cluster_resource_id\n  description = \"The region-unique, immutable identifie of the cluster\"\n}\n\noutput \"public_subnet_cidrs\" {\n  value       = module.subnets.public_subnet_cidrs\n  description = \"Public subnet CIDR blocks\"\n}\n\noutput \"private_subnet_cidrs\" {\n  value       = module.subnets.private_subnet_cidrs\n  description = \"Private subnet CIDR blocks\"\n}\n\noutput \"vpc_cidr\" {\n  value       = module.vpc.vpc_cidr_block\n  description = \"VPC CIDR\"\n}\n\noutput \"security_group_id\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.security_group_id\n  description = \"Security Group ID\"\n}\n\noutput \"security_group_arn\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.security_group_arn\n  description = \"Security Group ARN\"\n}\n\noutput \"security_group_name\" {\n  value       = module.rds_cluster_aurora_serverlessv2_postgres_13.security_group_name\n  description = \"Security Group name\"\n}\n"
  },
  {
    "path": "examples/serverlessv2_postgres/variables.tf",
    "content": "variable \"region\" {\n  type        = string\n  description = \"AWS region\"\n}\n\nvariable \"availability_zones\" {\n  type        = list(string)\n  description = \"Availability zones\"\n}\n\nvariable \"cluster_family\" {\n  type        = string\n  description = \"The family of the DB cluster parameter group\"\n}\n\nvariable \"engine\" {\n  type        = string\n  description = \"The name of the database engine to be used for this DB cluster. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql`\"\n}\n\nvariable \"engine_version\" {\n  type        = string\n  default     = \"\"\n  description = \"The version of the database engine to use. See `aws rds describe-db-engine-versions` \"\n}\n\nvariable \"instance_type\" {\n  type        = string\n  description = \"Instance type to use\"\n}\n\nvariable \"cluster_size\" {\n  type        = number\n  description = \"Number of DB instances to create in the cluster\"\n}\n\nvariable \"db_name\" {\n  type        = string\n  description = \"Database name\"\n}\n\nvariable \"admin_user\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Username for the master DB user\"\n}\n\nvariable \"admin_password\" {\n  type        = string\n  description = \"(Required unless a snapshot_identifier is provided) Password for the master DB user\"\n}\n\nvariable \"max_capacity\" {\n  type        = number\n  description = \"The maximum capacity for an Aurora DB cluster in provisioned DB engine mode\"\n}\n\nvariable \"min_capacity\" {\n  type        = number\n  description = \"The minimum capacity for an Aurora DB cluster in provisioned DB engine mode\"\n}\n\nvariable \"deletion_protection\" {\n  type        = bool\n  description = \"If the DB instance should have deletion protection enabled\"\n}\n\nvariable \"autoscaling_enabled\" {\n  type        = bool\n  description = \"Whether to enable cluster autoscaling\"\n}\n\nvariable \"enhanced_monitoring_role_enabled\" {\n  type        = bool\n  description = \"A boolean flag to enable/disable the creation of the enhanced monitoring IAM role. If set to `false`, the module will not create a new role and will use `rds_monitoring_role_arn` for enhanced monitoring\"\n}\n\nvariable \"rds_monitoring_interval\" {\n  type        = number\n  description = \"The interval, in seconds, between points when enhanced monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid Values: 0, 1, 5, 10, 15, 30, 60\"\n}\n"
  },
  {
    "path": "examples/serverlessv2_postgres/versions.tf",
    "content": "terraform {\n  required_version = \">= 1.1.0\"\n\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \">= 4.12\"\n    }\n    null = {\n      source  = \"hashicorp/null\"\n      version = \">= 2.0\"\n    }\n  }\n}\n"
  },
  {
    "path": "examples/with_cluster_parameters/main.tf",
    "content": "# https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBClusterParameterGroup.html\n\nprovider \"aws\" {\n  region = \"us-west-1\"\n}\n\nmodule \"rds_cluster_aurora_mysql\" {\n  source          = \"../../\"\n  engine          = \"aurora-mysql\"\n  cluster_family  = \"aurora-mysql5.7\"\n  cluster_size    = 2\n  namespace       = \"eg\"\n  stage           = \"dev\"\n  name            = \"db\"\n  admin_user      = \"admin1\"\n  admin_password  = \"Test123456789\"\n  db_name         = \"dbname\"\n  instance_type   = \"db.t2.small\"\n  vpc_id          = \"vpc-xxxxxxx\"\n  security_groups = [\"sg-xxxxxxxx\"]\n  subnets         = [\"subnet-xxxxxxxx\", \"subnet-xxxxxxxx\"]\n  zone_id         = \"Zxxxxxxxx\"\n\n  cluster_parameters = [\n    {\n      name         = \"character_set_client\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_connection\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_database\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_results\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"character_set_server\"\n      value        = \"utf8\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"collation_connection\"\n      value        = \"utf8_bin\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"collation_server\"\n      value        = \"utf8_bin\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"lower_case_table_names\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    },\n    {\n      name         = \"skip-character-set-client-handshake\"\n      value        = \"1\"\n      apply_method = \"pending-reboot\"\n    }\n  ]\n}\n"
  },
  {
    "path": "examples/with_cluster_parameters/outputs.tf",
    "content": "output \"name\" {\n  value       = module.rds_cluster_aurora_mysql.database_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = module.rds_cluster_aurora_mysql.master_username\n  description = \"Username for the master DB user\"\n}\n\noutput \"cluster_identifier\" {\n  value       = module.rds_cluster_aurora_mysql.cluster_identifier\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = module.rds_cluster_aurora_mysql.arn\n  description = \"Amazon Resource Name (ARN) of cluster\"\n}\n\noutput \"endpoint\" {\n  value       = module.rds_cluster_aurora_mysql.endpoint\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = module.rds_cluster_aurora_mysql.reader_endpoint\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"master_host\" {\n  value       = module.rds_cluster_aurora_mysql.master_host\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.rds_cluster_aurora_mysql.replicas_host\n  description = \"Replicas hostname\"\n}\n"
  },
  {
    "path": "main.tf",
    "content": "locals {\n  enabled = module.this.enabled\n\n  partition = one(data.aws_partition.current[*].partition)\n\n  deployed_cluster_identifier = local.enabled ? coalesce(one(aws_rds_cluster.primary[*].id), one(aws_rds_cluster.secondary[*].id)) : \"\"\n  db_subnet_group_name        = one(aws_db_subnet_group.default[*].name)\n  instance_class              = var.serverlessv2_scaling_configuration != null ? \"db.serverless\" : var.instance_type\n  instance_identifier_prefix  = var.cluster_identifier == \"\" ? module.this.id : var.cluster_identifier\n  instance_identifier_suffix_fragment = var.instance_identifier_suffix == null ? null : (\n    var.instance_identifier_suffix == \"\" ? \"\" : \"${module.this.delimiter}${var.instance_identifier_suffix}\"\n  )\n  instance_identifier = !local.enabled ? \"\" : (\n    var.instance_identifier_suffix == null ? random_pet.instance[0].id : \"${local.instance_identifier_prefix}${local.instance_identifier_suffix_fragment}\"\n  )\n\n  cluster_instance_count   = local.enabled ? var.cluster_size : 0\n  is_regional_cluster      = var.cluster_type == \"regional\"\n  is_serverless            = var.engine_mode == \"serverless\"\n  ignore_admin_credentials = var.replication_source_identifier != \"\" || var.snapshot_identifier != null\n  reserved_instance_engine = var.engine\n  use_reserved_instances   = var.use_reserved_instances && !local.is_serverless\n}\n\ndata \"aws_partition\" \"current\" {\n  count = local.enabled ? 1 : 0\n}\n\n# TODO: Use cloudposse/security-group module\nresource \"aws_security_group\" \"default\" {\n  count       = local.enabled ? 1 : 0\n  name        = module.this.id\n  description = \"Allow inbound traffic from Security Groups and CIDRs\"\n  vpc_id      = var.vpc_id\n  tags        = module.this.tags\n}\n\nresource \"aws_security_group_rule\" \"ingress_security_groups\" {\n  count                    = local.enabled ? length(var.security_groups) : 0\n  description              = \"Allow inbound traffic from existing security groups\"\n  type                     = \"ingress\"\n  from_port                = var.db_port\n  to_port                  = var.db_port\n  protocol                 = \"tcp\"\n  source_security_group_id = var.security_groups[count.index]\n  security_group_id        = join(\"\", aws_security_group.default[*].id)\n}\n\nresource \"aws_security_group_rule\" \"traffic_inside_security_group\" {\n  count             = local.enabled && var.intra_security_group_traffic_enabled ? 1 : 0\n  description       = \"Allow traffic between members of the database security group\"\n  type              = \"ingress\"\n  from_port         = var.db_port\n  to_port           = var.db_port\n  protocol          = \"tcp\"\n  self              = true\n  security_group_id = join(\"\", aws_security_group.default[*].id)\n}\n\nresource \"aws_security_group_rule\" \"ingress_cidr_blocks\" {\n  count             = local.enabled && length(var.allowed_cidr_blocks) > 0 ? 1 : 0\n  description       = \"Allow inbound traffic from existing CIDR blocks\"\n  type              = \"ingress\"\n  from_port         = var.db_port\n  to_port           = var.db_port\n  protocol          = \"tcp\"\n  cidr_blocks       = var.allowed_cidr_blocks\n  security_group_id = join(\"\", aws_security_group.default[*].id)\n}\n\nresource \"aws_security_group_rule\" \"ingress_ipv6_cidr_blocks\" {\n  count             = local.enabled && length(var.allowed_ipv6_cidr_blocks) > 0 ? 1 : 0\n  description       = \"Allow inbound traffic from existing CIDR blocks\"\n  type              = \"ingress\"\n  from_port         = var.db_port\n  to_port           = var.db_port\n  protocol          = \"tcp\"\n  ipv6_cidr_blocks  = var.allowed_ipv6_cidr_blocks\n  security_group_id = join(\"\", aws_security_group.default[*].id)\n}\n\nresource \"aws_security_group_rule\" \"egress\" {\n  count             = local.enabled && var.egress_enabled ? 1 : 0\n  description       = \"Allow outbound traffic\"\n  type              = \"egress\"\n  from_port         = 0\n  to_port           = 0\n  protocol          = \"-1\"\n  cidr_blocks       = [\"0.0.0.0/0\"]\n  security_group_id = join(\"\", aws_security_group.default[*].id)\n}\n\nresource \"aws_security_group_rule\" \"egress_ipv6\" {\n  count             = local.enabled && var.egress_enabled ? 1 : 0\n  description       = \"Allow outbound ipv6 traffic\"\n  type              = \"egress\"\n  from_port         = 0\n  to_port           = 0\n  protocol          = \"-1\"\n  ipv6_cidr_blocks  = [\"::/0\"]\n  security_group_id = join(\"\", aws_security_group.default[*].id)\n}\n\ndata \"aws_rds_reserved_instance_offering\" \"default\" {\n  count               = local.use_reserved_instances ? 1 : 0\n  db_instance_class   = var.instance_type\n  duration            = var.rds_ri_duration\n  multi_az            = startswith(local.reserved_instance_engine, \"aurora\") ? false : local.cluster_instance_count > 1 # Aurora options never available for multi AZ for Reserved Instances. Single Reserved Instances rates still apply. https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_WorkingWithReservedDBInstances.html\n  offering_type       = var.rds_ri_offering_type\n  product_description = local.reserved_instance_engine\n}\n\n# Note: I'm not sure what will happen when the db reservation expires, and this is not easy to test.\n# It will either be recreated or will require manual intervention to recreate.\nresource \"aws_rds_reserved_instance\" \"default\" {\n  count = local.use_reserved_instances ? 1 : 0\n\n  offering_id    = data.aws_rds_reserved_instance_offering.default[0].id\n  instance_count = local.cluster_instance_count\n  reservation_id = var.rds_ri_reservation_id\n\n  lifecycle {\n    # Once created, we want to avoid any case of accidentally re-creating.\n    prevent_destroy = true\n  }\n}\n\n# The name \"primary\" is poorly chosen. We actually mean standalone or regional.\n# The primary cluster of a global database is actually created with the \"secondary\" cluster resource below.\nresource \"aws_rds_cluster\" \"primary\" {\n  count              = local.enabled && local.is_regional_cluster ? 1 : 0\n  cluster_identifier = var.cluster_identifier == \"\" ? module.this.id : var.cluster_identifier\n  database_name      = var.db_name\n  # manage_master_user_password must be `null` or `true`. If it is `false`, and `master_password` is not `null`, a conflict occurs.\n  manage_master_user_password           = var.manage_admin_user_password ? var.manage_admin_user_password : null\n  master_user_secret_kms_key_id         = var.admin_user_secret_kms_key_id\n  master_username                       = local.ignore_admin_credentials ? null : var.admin_user\n  master_password                       = local.ignore_admin_credentials || var.manage_admin_user_password ? null : var.admin_password\n  backup_retention_period               = var.retention_period\n  preferred_backup_window               = var.backup_window\n  copy_tags_to_snapshot                 = var.copy_tags_to_snapshot\n  final_snapshot_identifier             = var.cluster_identifier == \"\" ? lower(module.this.id) : lower(var.cluster_identifier)\n  skip_final_snapshot                   = var.skip_final_snapshot\n  apply_immediately                     = var.apply_immediately\n  db_cluster_instance_class             = local.is_serverless ? null : var.db_cluster_instance_class\n  storage_encrypted                     = local.is_serverless ? null : var.storage_encrypted\n  storage_type                          = var.storage_type\n  iops                                  = var.iops\n  allocated_storage                     = var.allocated_storage\n  kms_key_id                            = var.kms_key_arn\n  source_region                         = var.source_region\n  snapshot_identifier                   = var.snapshot_identifier\n  vpc_security_group_ids                = compact(flatten([join(\"\", aws_security_group.default[*].id), var.vpc_security_group_ids]))\n  preferred_maintenance_window          = var.maintenance_window\n  network_type                          = var.network_type\n  db_subnet_group_name                  = join(\"\", aws_db_subnet_group.default[*].name)\n  db_cluster_parameter_group_name       = join(\"\", aws_rds_cluster_parameter_group.default[*].name)\n  iam_database_authentication_enabled   = var.iam_database_authentication_enabled\n  tags                                  = module.this.tags\n  engine                                = var.engine\n  engine_version                        = var.engine_version\n  allow_major_version_upgrade           = var.allow_major_version_upgrade\n  db_instance_parameter_group_name      = var.allow_major_version_upgrade ? join(\"\", aws_db_parameter_group.default[*].name) : null\n  engine_mode                           = var.engine_mode\n  iam_roles                             = var.iam_roles\n  backtrack_window                      = var.backtrack_window\n  enable_http_endpoint                  = var.enable_http_endpoint\n  port                                  = var.db_port\n  enable_global_write_forwarding        = var.enable_global_write_forwarding\n  enable_local_write_forwarding         = var.enable_local_write_forwarding\n  performance_insights_enabled          = var.performance_insights_enabled\n  performance_insights_kms_key_id       = var.performance_insights_kms_key_id\n  performance_insights_retention_period = var.performance_insights_retention_period\n  database_insights_mode                = var.database_insights_mode\n\n  depends_on = [\n    aws_db_subnet_group.default,\n    aws_rds_cluster_parameter_group.default,\n    aws_security_group.default,\n  ]\n\n  dynamic \"s3_import\" {\n    for_each = var.s3_import[*]\n    content {\n      bucket_name           = lookup(s3_import.value, \"bucket_name\", null)\n      bucket_prefix         = lookup(s3_import.value, \"bucket_prefix\", null)\n      ingestion_role        = lookup(s3_import.value, \"ingestion_role\", null)\n      source_engine         = lookup(s3_import.value, \"source_engine\", null)\n      source_engine_version = lookup(s3_import.value, \"source_engine_version\", null)\n    }\n  }\n\n  dynamic \"scaling_configuration\" {\n    for_each = var.scaling_configuration\n    content {\n      auto_pause               = lookup(scaling_configuration.value, \"auto_pause\", null)\n      max_capacity             = lookup(scaling_configuration.value, \"max_capacity\", null)\n      min_capacity             = lookup(scaling_configuration.value, \"min_capacity\", null)\n      seconds_until_auto_pause = lookup(scaling_configuration.value, \"seconds_until_auto_pause\", null)\n      timeout_action           = lookup(scaling_configuration.value, \"timeout_action\", null)\n    }\n  }\n\n  dynamic \"serverlessv2_scaling_configuration\" {\n    for_each = var.serverlessv2_scaling_configuration[*]\n    content {\n      max_capacity             = serverlessv2_scaling_configuration.value.max_capacity\n      min_capacity             = serverlessv2_scaling_configuration.value.min_capacity\n      seconds_until_auto_pause = serverlessv2_scaling_configuration.value.seconds_until_auto_pause\n    }\n  }\n\n  dynamic \"timeouts\" {\n    for_each = var.timeouts_configuration\n    content {\n      create = lookup(timeouts.value, \"create\", \"120m\")\n      update = lookup(timeouts.value, \"update\", \"120m\")\n      delete = lookup(timeouts.value, \"delete\", \"120m\")\n    }\n  }\n\n  dynamic \"restore_to_point_in_time\" {\n    for_each = var.restore_to_point_in_time\n    content {\n      source_cluster_identifier = restore_to_point_in_time.value.source_cluster_identifier\n      restore_type              = restore_to_point_in_time.value.restore_type\n      # use_latest_restorable_time and restore_to_time are mutually exclusive.\n      # If restore_to_time is given, then we ignore use_latest_restorable_time\n      use_latest_restorable_time = restore_to_point_in_time.value.restore_to_time != null ? null : restore_to_point_in_time.value.use_latest_restorable_time\n      restore_to_time            = restore_to_point_in_time.value.restore_to_time\n    }\n  }\n\n  enabled_cloudwatch_logs_exports = var.enabled_cloudwatch_logs_exports\n  deletion_protection             = var.deletion_protection\n  replication_source_identifier   = var.replication_source_identifier\n}\n\n# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster#replication_source_identifier\nresource \"aws_rds_cluster\" \"secondary\" {\n  count              = local.enabled && !local.is_regional_cluster ? 1 : 0\n  cluster_identifier = var.cluster_identifier == \"\" ? module.this.id : var.cluster_identifier\n  database_name      = var.db_name\n  # manage_master_user_password must be `null` or `true`. If it is `false`, and `master_password` is not `null`, a conflict occurs.\n  manage_master_user_password         = var.manage_admin_user_password ? var.manage_admin_user_password : null\n  master_user_secret_kms_key_id       = var.admin_user_secret_kms_key_id\n  master_username                     = local.ignore_admin_credentials ? null : var.admin_user\n  master_password                     = local.ignore_admin_credentials || var.manage_admin_user_password ? null : var.admin_password\n  backup_retention_period             = var.retention_period\n  preferred_backup_window             = var.backup_window\n  copy_tags_to_snapshot               = var.copy_tags_to_snapshot\n  final_snapshot_identifier           = var.cluster_identifier == \"\" ? lower(module.this.id) : lower(var.cluster_identifier)\n  skip_final_snapshot                 = var.skip_final_snapshot\n  apply_immediately                   = var.apply_immediately\n  db_cluster_instance_class           = local.is_serverless ? null : var.db_cluster_instance_class\n  storage_encrypted                   = var.storage_encrypted\n  storage_type                        = var.storage_type\n  kms_key_id                          = var.kms_key_arn\n  source_region                       = var.source_region\n  snapshot_identifier                 = var.snapshot_identifier\n  vpc_security_group_ids              = compact(flatten([join(\"\", aws_security_group.default[*].id), var.vpc_security_group_ids]))\n  preferred_maintenance_window        = var.maintenance_window\n  network_type                        = var.network_type\n  db_subnet_group_name                = join(\"\", aws_db_subnet_group.default[*].name)\n  db_cluster_parameter_group_name     = join(\"\", aws_rds_cluster_parameter_group.default[*].name)\n  iam_database_authentication_enabled = var.iam_database_authentication_enabled\n  tags                                = module.this.tags\n  engine                              = var.engine\n  engine_version                      = var.engine_version\n  allow_major_version_upgrade         = var.allow_major_version_upgrade\n  engine_mode                         = var.engine_mode\n  iam_roles                           = var.iam_roles\n  backtrack_window                    = var.backtrack_window\n  enable_http_endpoint                = var.enable_http_endpoint\n  port                                = var.db_port\n  enable_global_write_forwarding      = var.enable_global_write_forwarding\n  enable_local_write_forwarding       = var.enable_local_write_forwarding\n  database_insights_mode              = var.database_insights_mode\n\n  depends_on = [\n    aws_db_subnet_group.default,\n    aws_db_parameter_group.default,\n    aws_rds_cluster_parameter_group.default,\n    aws_security_group.default,\n  ]\n\n  dynamic \"scaling_configuration\" {\n    for_each = var.scaling_configuration\n    content {\n      auto_pause               = lookup(scaling_configuration.value, \"auto_pause\", null)\n      max_capacity             = lookup(scaling_configuration.value, \"max_capacity\", null)\n      min_capacity             = lookup(scaling_configuration.value, \"min_capacity\", null)\n      seconds_until_auto_pause = lookup(scaling_configuration.value, \"seconds_until_auto_pause\", null)\n      timeout_action           = lookup(scaling_configuration.value, \"timeout_action\", null)\n    }\n  }\n\n  dynamic \"serverlessv2_scaling_configuration\" {\n    for_each = var.serverlessv2_scaling_configuration[*]\n    content {\n      max_capacity = serverlessv2_scaling_configuration.value.max_capacity\n      min_capacity = serverlessv2_scaling_configuration.value.min_capacity\n    }\n  }\n\n  dynamic \"timeouts\" {\n    for_each = var.timeouts_configuration\n    content {\n      create = lookup(timeouts.value, \"create\", \"120m\")\n      update = lookup(timeouts.value, \"update\", \"120m\")\n      delete = lookup(timeouts.value, \"delete\", \"120m\")\n    }\n  }\n\n  enabled_cloudwatch_logs_exports = var.enabled_cloudwatch_logs_exports\n  deletion_protection             = var.deletion_protection\n\n  global_cluster_identifier = var.global_cluster_identifier\n\n  # https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster#replication_source_identifier\n  # ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica.\n  # If DB Cluster is part of a Global Cluster, use the lifecycle configuration block ignore_changes argument\n  # to prevent Terraform from showing differences for this argument instead of configuring this value.\n\n  lifecycle {\n    ignore_changes = [\n      replication_source_identifier, # will be set/managed by Global Cluster\n      snapshot_identifier,           # if created from a snapshot, will be non-null at creation, but null afterwards\n    ]\n  }\n}\n\nresource \"random_pet\" \"instance\" {\n  count  = local.enabled && var.instance_identifier_suffix == null ? 1 : 0\n  prefix = local.instance_identifier_prefix\n  keepers = {\n    cluster_family = var.cluster_family\n    instance_class = var.serverlessv2_scaling_configuration != null ? \"db.serverless\" : var.instance_type\n  }\n}\n\nmodule \"rds_identifier\" {\n  count = local.enabled ? 1 : 0\n\n  source  = \"cloudposse/label/null\"\n  version = \"0.25.0\"\n\n  name = local.instance_identifier\n  # Max length of RDS identifier is 63 characters, but in `aws_rds_cluster_instance`\n  # we append the instance index to the identifier\n  # Setting the limit to 60 allow to use up to 99 instances, when only 16 is allowed\n  # (1 writer + 15 readers)\n  # https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Replication.html\n  id_length_limit = 60\n}\n\nresource \"aws_rds_cluster_instance\" \"default\" {\n  count                                 = local.cluster_instance_count\n  identifier                            = \"${module.rds_identifier[0].id}-${count.index + 1}\"\n  cluster_identifier                    = local.deployed_cluster_identifier\n  instance_class                        = local.instance_class\n  db_subnet_group_name                  = local.db_subnet_group_name\n  db_parameter_group_name               = join(\"\", aws_db_parameter_group.default[*].name)\n  publicly_accessible                   = var.publicly_accessible\n  tags                                  = module.this.tags\n  engine                                = var.engine\n  engine_version                        = var.engine_version\n  auto_minor_version_upgrade            = var.auto_minor_version_upgrade\n  monitoring_interval                   = var.rds_monitoring_interval\n  monitoring_role_arn                   = var.enhanced_monitoring_role_enabled ? join(\"\", aws_iam_role.enhanced_monitoring[*].arn) : var.rds_monitoring_role_arn\n  performance_insights_enabled          = var.performance_insights_enabled\n  performance_insights_kms_key_id       = var.performance_insights_kms_key_id\n  performance_insights_retention_period = var.performance_insights_retention_period\n  availability_zone                     = var.instance_availability_zone\n  apply_immediately                     = var.apply_immediately\n  preferred_maintenance_window          = var.maintenance_window\n  copy_tags_to_snapshot                 = var.copy_tags_to_snapshot\n  ca_cert_identifier                    = var.ca_cert_identifier\n  promotion_tier                        = var.promotion_tier\n\n  dynamic \"timeouts\" {\n    for_each = var.timeouts_configuration\n    content {\n      create = lookup(timeouts.value, \"create\", \"120m\")\n      update = lookup(timeouts.value, \"update\", \"120m\")\n      delete = lookup(timeouts.value, \"delete\", \"120m\")\n    }\n  }\n\n  depends_on = [\n    aws_db_subnet_group.default,\n    aws_db_parameter_group.default,\n    aws_iam_role.enhanced_monitoring,\n    aws_rds_cluster.secondary,\n    aws_rds_cluster_parameter_group.default,\n  ]\n\n  lifecycle {\n    ignore_changes        = [engine_version]\n    create_before_destroy = true\n  }\n}\n\nresource \"aws_db_subnet_group\" \"default\" {\n  count       = local.enabled ? 1 : 0\n  name        = try(length(var.subnet_group_name), 0) == 0 ? module.this.id : var.subnet_group_name\n  description = \"Allowed subnets for DB cluster instances\"\n  subnet_ids  = var.subnets\n  tags        = module.this.tags\n}\n\nresource \"aws_rds_cluster_parameter_group\" \"default\" {\n  count = local.enabled ? 1 : 0\n\n  name_prefix = var.parameter_group_name_prefix_enabled ? \"${coalesce(var.rds_cluster_parameter_group_name, module.this.id)}${module.this.delimiter}\" : null\n  name        = !var.parameter_group_name_prefix_enabled ? coalesce(var.rds_cluster_parameter_group_name, module.this.id) : null\n\n  description = \"DB cluster parameter group\"\n  family      = var.cluster_family\n\n  dynamic \"parameter\" {\n    for_each = var.cluster_parameters\n    content {\n      apply_method = lookup(parameter.value, \"apply_method\", null)\n      name         = parameter.value.name\n      value        = parameter.value.value\n    }\n  }\n\n  tags = module.this.tags\n\n  lifecycle {\n    create_before_destroy = true\n  }\n}\n\nresource \"aws_db_parameter_group\" \"default\" {\n  count = local.enabled ? 1 : 0\n\n  name_prefix = var.parameter_group_name_prefix_enabled ? \"${coalesce(var.db_parameter_group_name, module.this.id)}${module.this.delimiter}\" : null\n  name        = !var.parameter_group_name_prefix_enabled ? coalesce(var.db_parameter_group_name, module.this.id) : null\n\n  description = \"DB instance parameter group\"\n  family      = var.cluster_family\n\n  dynamic \"parameter\" {\n    for_each = var.instance_parameters\n    content {\n      apply_method = lookup(parameter.value, \"apply_method\", null)\n      name         = parameter.value.name\n      value        = parameter.value.value\n    }\n  }\n\n  tags = module.this.tags\n\n  lifecycle {\n    create_before_destroy = true\n  }\n}\n\nlocals {\n  cluster_dns_name_default = \"master.${module.this.name}\"\n  cluster_dns_name         = var.cluster_dns_name != \"\" ? var.cluster_dns_name : local.cluster_dns_name_default\n  reader_dns_name_default  = \"replicas.${module.this.name}\"\n  reader_dns_name          = var.reader_dns_name != \"\" ? var.reader_dns_name : local.reader_dns_name_default\n}\n\nmodule \"dns_master\" {\n  source  = \"cloudposse/route53-cluster-hostname/aws\"\n  version = \"0.13.0\"\n\n  enabled  = local.enabled && length(var.zone_id) > 0\n  dns_name = local.cluster_dns_name\n  zone_id  = try(var.zone_id[0], tostring(var.zone_id), \"\")\n  records  = coalescelist(aws_rds_cluster.primary[*].endpoint, aws_rds_cluster.secondary[*].endpoint, [\"\"])\n\n  context = module.this.context\n}\n\nmodule \"dns_replicas\" {\n  source  = \"cloudposse/route53-cluster-hostname/aws\"\n  version = \"0.13.0\"\n\n  enabled  = local.enabled && length(var.zone_id) > 0 && !local.is_serverless && local.cluster_instance_count > 0\n  dns_name = local.reader_dns_name\n  zone_id  = try(var.zone_id[0], tostring(var.zone_id), \"\")\n  records  = coalescelist(aws_rds_cluster.primary[*].reader_endpoint, aws_rds_cluster.secondary[*].reader_endpoint, [\"\"])\n\n  context = module.this.context\n}\n\nresource \"aws_appautoscaling_target\" \"replicas\" {\n  count              = local.enabled && var.autoscaling_enabled ? 1 : 0\n  service_namespace  = \"rds\"\n  scalable_dimension = \"rds:cluster:ReadReplicaCount\"\n  resource_id        = \"cluster:${local.deployed_cluster_identifier}\"\n  min_capacity       = var.autoscaling_min_capacity\n  max_capacity       = var.autoscaling_max_capacity\n}\n\nresource \"aws_appautoscaling_policy\" \"replicas\" {\n  count              = local.enabled && var.autoscaling_enabled ? 1 : 0\n  name               = module.this.id\n  service_namespace  = join(\"\", aws_appautoscaling_target.replicas[*].service_namespace)\n  scalable_dimension = join(\"\", aws_appautoscaling_target.replicas[*].scalable_dimension)\n  resource_id        = join(\"\", aws_appautoscaling_target.replicas[*].resource_id)\n  policy_type        = var.autoscaling_policy_type\n\n  target_tracking_scaling_policy_configuration {\n    predefined_metric_specification {\n      predefined_metric_type = var.autoscaling_target_metrics\n    }\n\n    disable_scale_in   = false\n    target_value       = var.autoscaling_target_value\n    scale_in_cooldown  = var.autoscaling_scale_in_cooldown\n    scale_out_cooldown = var.autoscaling_scale_out_cooldown\n  }\n}\n\nresource \"aws_rds_cluster_activity_stream\" \"primary\" {\n  count = local.enabled && var.activity_stream_enabled ? 1 : 0\n\n  resource_arn = join(\"\", aws_rds_cluster.primary[*].arn)\n  mode         = var.activity_stream_mode\n  kms_key_id   = var.activity_stream_kms_key_id\n}\n"
  },
  {
    "path": "outputs.tf",
    "content": "output \"database_name\" {\n  value       = var.db_name\n  description = \"Database name\"\n}\n\noutput \"master_username\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].master_username) : join(\"\", aws_rds_cluster.secondary[*].master_username)\n  description = \"Username for the master DB user\"\n  sensitive   = true\n}\n\noutput \"cluster_identifier\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].cluster_identifier) : join(\"\", aws_rds_cluster.secondary[*].cluster_identifier)\n  description = \"Cluster Identifier\"\n}\n\noutput \"arn\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].arn) : join(\"\", aws_rds_cluster.secondary[*].arn)\n  description = \"Amazon Resource Name (ARN) of the cluster\"\n}\n\noutput \"endpoint\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].endpoint) : join(\"\", aws_rds_cluster.secondary[*].endpoint)\n  description = \"The DNS address of the RDS instance\"\n}\n\noutput \"reader_endpoint\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].reader_endpoint) : join(\"\", aws_rds_cluster.secondary[*].reader_endpoint)\n  description = \"A read-only endpoint for the Aurora cluster, automatically load-balanced across replicas\"\n}\n\noutput \"port\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].port) : join(\"\", aws_rds_cluster.secondary[*].port)\n  description = \"DB port\"\n}\n\n# See: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster.html#master_user_secret\noutput \"admin_user_secret\" {\n  value       = var.manage_admin_user_password ? concat(aws_rds_cluster.primary[*].master_user_secret) : []\n  description = \"The secret manager attributes for the managed admin user password (`master_user_secret`).\"\n}\n\noutput \"master_host\" {\n  value       = module.dns_master.hostname\n  description = \"DB Master hostname\"\n}\n\noutput \"replicas_host\" {\n  value       = module.dns_replicas.hostname\n  description = \"Replicas hostname\"\n}\n\noutput \"dbi_resource_ids\" {\n  value       = aws_rds_cluster_instance.default[*].dbi_resource_id\n  description = \"List of the region-unique, immutable identifiers for the DB instances in the cluster\"\n}\n\noutput \"instance_endpoints\" {\n  value       = aws_rds_cluster_instance.default[*].endpoint\n  description = \"List of DNS addresses for the DB instances in the cluster\"\n}\n\noutput \"instance_arns\" {\n  value       = aws_rds_cluster_instance.default[*].arn\n  description = \"List of ARNs of the DB instances in the cluster\"\n}\n\noutput \"cluster_resource_id\" {\n  value       = local.is_regional_cluster ? join(\"\", aws_rds_cluster.primary[*].cluster_resource_id) : join(\"\", aws_rds_cluster.secondary[*].cluster_resource_id)\n  description = \"The region-unique, immutable identifie of the cluster\"\n}\n\noutput \"cluster_security_groups\" {\n  value       = coalescelist(aws_rds_cluster.primary[*].vpc_security_group_ids, aws_rds_cluster.secondary[*].vpc_security_group_ids, [\"\"])\n  description = \"Default RDS cluster security groups\"\n}\n\noutput \"security_group_id\" {\n  value       = join(\"\", aws_security_group.default[*].id)\n  description = \"Security Group ID\"\n}\n\noutput \"security_group_arn\" {\n  value       = join(\"\", aws_security_group.default[*].arn)\n  description = \"Security Group ARN\"\n}\n\noutput \"security_group_name\" {\n  value       = join(\"\", aws_security_group.default[*].name)\n  description = \"Security Group name\"\n}\n\noutput \"activity_stream_arn\" {\n  value       = join(\"\", aws_rds_cluster_activity_stream.primary[*].id)\n  description = \"Activity Stream ARN\"\n}\n\noutput \"activity_stream_name\" {\n  value       = join(\"\", aws_rds_cluster_activity_stream.primary[*].kinesis_stream_name)\n  description = \"Activity Stream Name\"\n}\n\noutput \"reserved_instance\" {\n  value       = aws_rds_reserved_instance.default\n  description = \"All information about the reserved instance(s) if created.\"\n}\n"
  },
  {
    "path": "test/.gitignore",
    "content": ".test-harness\n"
  },
  {
    "path": "test/Makefile",
    "content": "TEST_HARNESS ?= https://github.com/cloudposse/test-harness.git\nTEST_HARNESS_BRANCH ?= master\nTEST_HARNESS_PATH = $(realpath .test-harness)\nBATS_ARGS ?= --tap\nBATS_LOG ?= test.log\n\n# Define a macro to run the tests\ndefine RUN_TESTS\n@echo \"Running tests in $(1)\"\n@cd $(1) && bats $(BATS_ARGS) $(addsuffix .bats,$(addprefix $(TEST_HARNESS_PATH)/test/terraform/,$(TESTS)))\nendef\n\ndefault: all\n\n-include Makefile.*\n\n## Provision the test-harnesss\n.test-harness:\n\t[ -d $@ ] || git clone --depth=1 -b $(TEST_HARNESS_BRANCH) $(TEST_HARNESS) $@\n\n## Initialize the tests\ninit: .test-harness\n\n## Install all dependencies (OS specific)\ndeps::\n\t@exit 0\n\n## Clean up the test harness\nclean:\n\t[ \"$(TEST_HARNESS_PATH)\" == \"/\" ] || rm -rf $(TEST_HARNESS_PATH)\n\n## Run all tests\nall: module examples/complete\n\n## Run basic sanity checks against the module itself\nmodule: export TESTS ?= installed lint module-pinning provider-pinning validate terraform-docs input-descriptions output-descriptions\nmodule: deps\n\t$(call RUN_TESTS, ../)\n\n## Run tests against example\nexamples/complete: export TESTS ?= installed lint validate\nexamples/complete: deps\n\t$(call RUN_TESTS, ../$@)\n"
  },
  {
    "path": "test/Makefile.alpine",
    "content": "ifneq (,$(wildcard /sbin/apk))\n## Install all dependencies for alpine\ndeps:: init\n\t@apk add --update terraform-docs@cloudposse json2hcl@cloudposse\nendif\n"
  },
  {
    "path": "test/src/.gitignore",
    "content": ".gopath\nvendor/\n"
  },
  {
    "path": "test/src/Makefile",
    "content": "export TERRAFORM_VERSION ?= $(shell curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M '.current_version' | cut -d. -f1)\nexport GOTOOLCHAIN = local\n\n.DEFAULT_GOAL : all\n.PHONY: all\n\n## Default target\nall: test\n\n.PHONY : init\n## Initialize tests\ninit:\n\t@exit 0\n\n.PHONY : test\n## Run tests\ntest: init\n\tgo mod download\n\t# Allow more parallel tests than there are CPU cores because most of the time tests are just waiting for AWS\n\tgo test -v -timeout 60m -parallel 8\n\n## Run tests in docker container\ndocker/test:\n\tdocker run --name terratest --rm -it -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -e GITHUB_TOKEN -e GOTOOLCHAIN \\\n\t\t-e PATH=\"/usr/local/terraform/$(TERRAFORM_VERSION)/bin:/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\" \\\n\t\t-v $(CURDIR)/../../:/module/ cloudposse/test-harness:latest -C /module/test/src test\n\n.PHONY : clean\n## Clean up files\nclean:\n\trm -rf ../../examples/complete/*.tfstate*\n\trm -rf ../../examples/serverlessv2_postgres/*.tfstate*\n"
  },
  {
    "path": "test/src/examples_complete_test.go",
    "content": "package test\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/gruntwork-io/terratest/modules/random\"\n\t\"github.com/gruntwork-io/terratest/modules/terraform\"\n\ttestStructure \"github.com/gruntwork-io/terratest/modules/test-structure\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\n// Test the Terraform module in examples/complete using Terratest.\nfunc TestExamplesComplete(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/complete\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tterraform.InitAndApply(t, terraformOptions)\n\n\t// Run `terraform output` to get the value of an output variable\n\tvpcCidr := terraform.Output(t, terraformOptions, \"vpc_cidr\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, \"172.16.0.0/16\", vpcCidr)\n\n\t// Run `terraform output` to get the value of an output variable\n\tprivateSubnetCidrs := terraform.OutputList(t, terraformOptions, \"private_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.0.0/19\", \"172.16.32.0/19\"}, privateSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tpublicSubnetCidrs := terraform.OutputList(t, terraformOptions, \"public_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.96.0/19\", \"172.16.128.0/19\"}, publicSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tclusterIdentifier := terraform.Output(t, terraformOptions, \"cluster_identifier\")\n\texpectedClusterIdentifier := \"eg-test-rds-cluster-\" + randID\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, expectedClusterIdentifier, clusterIdentifier)\n\n\t// Run `terraform output` to get the value of an output variable\n\tarn := terraform.Output(t, terraformOptions, \"arn\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Contains(t, arn, \":cluster:eg-test-rds-cluster\")\n}\n\nfunc TestExamplesCompleteDisabled(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/complete\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t\t\"enabled\":    false,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tresults := terraform.InitAndApply(t, terraformOptions)\n\n\t// Should complete successfully without creating or changing any resources.\n\t// Extract the \"Resources:\" section of the output to make the error message more readable.\n\tre := regexp.MustCompile(`Resources: [^.]+\\.`)\n\tmatch := re.FindString(results)\n\tassert.Equal(t, \"Resources: 0 added, 0 changed, 0 destroyed.\", match, \"Re-applying the same configuration should not change any resources\")\n}\n"
  },
  {
    "path": "test/src/examples_postgres_test.go",
    "content": "package test\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/gruntwork-io/terratest/modules/random\"\n\t\"github.com/gruntwork-io/terratest/modules/terraform\"\n\ttestStructure \"github.com/gruntwork-io/terratest/modules/test-structure\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\n// Test the Terraform module in examples/postgres using Terratest.\nfunc TestExamplesPostgres(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/postgres\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tterraform.InitAndApply(t, terraformOptions)\n\n\t// Run `terraform output` to get the value of an output variable\n\tvpcCidr := terraform.Output(t, terraformOptions, \"vpc_cidr\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, \"172.16.0.0/16\", vpcCidr)\n\n\t// Run `terraform output` to get the value of an output variable\n\tprivateSubnetCidrs := terraform.OutputList(t, terraformOptions, \"private_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.0.0/19\", \"172.16.32.0/19\", \"172.16.64.0/19\"}, privateSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tpublicSubnetCidrs := terraform.OutputList(t, terraformOptions, \"public_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.96.0/19\", \"172.16.128.0/19\", \"172.16.160.0/19\"}, publicSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tclusterIdentifier := terraform.Output(t, terraformOptions, \"cluster_identifier\")\n\texpectedClusterIdentifier := \"eg-test-rds-cluster-\" + randID\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, expectedClusterIdentifier, clusterIdentifier)\n\n\t// Run `terraform output` to get the value of an output variable\n\tarn := terraform.Output(t, terraformOptions, \"arn\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Contains(t, arn, \":cluster:eg-test-rds-cluster\")\n}\n\nfunc TestExamplesPostgresDisabled(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/postgres\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t\t\"enabled\":    false,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tresults := terraform.InitAndApply(t, terraformOptions)\n\n\t// Should complete successfully without creating or changing any resources.\n\t// Extract the \"Resources:\" section of the output to make the error message more readable.\n\tre := regexp.MustCompile(`Resources: [^.]+\\.`)\n\tmatch := re.FindString(results)\n\tassert.Equal(t, \"Resources: 0 added, 0 changed, 0 destroyed.\", match, \"Re-applying the same configuration should not change any resources\")\n}\n"
  },
  {
    "path": "test/src/examples_serverlessv2_postgres_test.go",
    "content": "package test\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/gruntwork-io/terratest/modules/random\"\n\t\"github.com/gruntwork-io/terratest/modules/terraform\"\n\ttestStructure \"github.com/gruntwork-io/terratest/modules/test-structure\"\n\t\"github.com/stretchr/testify/assert\"\n)\n\n// Test the Terraform module in examples/serverlessv2_postgres using Terratest.\nfunc TestExamplesServerlessV2Postgres(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/serverlessv2_postgres\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tterraform.InitAndApply(t, terraformOptions)\n\n\t// Run `terraform output` to get the value of an output variable\n\tvpcCidr := terraform.Output(t, terraformOptions, \"vpc_cidr\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, \"172.16.0.0/16\", vpcCidr)\n\n\t// Run `terraform output` to get the value of an output variable\n\tprivateSubnetCidrs := terraform.OutputList(t, terraformOptions, \"private_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.0.0/19\", \"172.16.32.0/19\"}, privateSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tpublicSubnetCidrs := terraform.OutputList(t, terraformOptions, \"public_subnet_cidrs\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, []string{\"172.16.96.0/19\", \"172.16.128.0/19\"}, publicSubnetCidrs)\n\n\t// Run `terraform output` to get the value of an output variable\n\tclusterIdentifier := terraform.Output(t, terraformOptions, \"cluster_identifier\")\n\texpectedClusterIdentifier := \"eg-test-rds-cluster-\" + randID\n\t// Verify we're getting back the outputs we expect\n\tassert.Equal(t, expectedClusterIdentifier, clusterIdentifier)\n\n\t// Run `terraform output` to get the value of an output variable\n\tarn := terraform.Output(t, terraformOptions, \"arn\")\n\t// Verify we're getting back the outputs we expect\n\tassert.Contains(t, arn, \":cluster:eg-test-rds-cluster\")\n}\n\nfunc TestExamplesServerlessV2PostgresDisabled(t *testing.T) {\n\tt.Parallel()\n\trandID := strings.ToLower(random.UniqueId())\n\tattributes := []string{randID}\n\n\trootFolder := \"../../\"\n\tterraformFolderRelativeToRoot := \"examples/serverlessv2_postgres\"\n\tvarFiles := []string{\"fixtures.us-east-2.tfvars\"}\n\n\ttempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot)\n\n\tterraformOptions := &terraform.Options{\n\t\t// The path to where our Terraform code is located\n\t\tTerraformDir: tempTestFolder,\n\t\tUpgrade:      true,\n\t\t// Variables to pass to our Terraform code using -var-file options\n\t\tVarFiles: varFiles,\n\t\tVars: map[string]interface{}{\n\t\t\t\"attributes\": attributes,\n\t\t\t\"enabled\":    false,\n\t\t},\n\t}\n\n\t// At the end of the test, run `terraform destroy` to clean up any resources that were created\n\tdefer cleanup(t, terraformOptions, tempTestFolder)\n\n\t// This will run `terraform init` and `terraform apply` and fail the test if there are any errors\n\tresults := terraform.InitAndApply(t, terraformOptions)\n\n\t// Should complete successfully without creating or changing any resources.\n\t// Extract the \"Resources:\" section of the output to make the error message more readable.\n\tre := regexp.MustCompile(`Resources: [^.]+\\.`)\n\tmatch := re.FindString(results)\n\tassert.Equal(t, \"Resources: 0 added, 0 changed, 0 destroyed.\", match, \"Re-applying the same configuration should not change any resources\")\n}\n"
  },
  {
    "path": "test/src/go.mod",
    "content": "module github.com/cloudposse/terraform-aws-rds-cluster\n\ngo 1.24\n\ntoolchain go1.24.0\n\nrequire (\n\tgithub.com/gruntwork-io/terratest v0.46.15\n\tgithub.com/stretchr/testify v1.8.4\n)\n\nrequire (\n\tcloud.google.com/go v0.110.0 // indirect\n\tcloud.google.com/go/compute v1.19.1 // indirect\n\tcloud.google.com/go/compute/metadata v0.2.3 // indirect\n\tcloud.google.com/go/iam v0.13.0 // indirect\n\tcloud.google.com/go/storage v1.28.1 // indirect\n\tgithub.com/agext/levenshtein v1.2.3 // indirect\n\tgithub.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect\n\tgithub.com/aws/aws-sdk-go v1.44.122 // indirect\n\tgithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect\n\tgithub.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect\n\tgithub.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/emicklei/go-restful/v3 v3.9.0 // indirect\n\tgithub.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0 // indirect\n\tgithub.com/go-logr/logr v1.2.4 // indirect\n\tgithub.com/go-openapi/jsonpointer v0.19.6 // indirect\n\tgithub.com/go-openapi/jsonreference v0.20.2 // indirect\n\tgithub.com/go-openapi/swag v0.22.3 // indirect\n\tgithub.com/go-sql-driver/mysql v1.4.1 // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect\n\tgithub.com/golang/protobuf v1.5.3 // indirect\n\tgithub.com/google/gnostic-models v0.6.8 // indirect\n\tgithub.com/google/go-cmp v0.5.9 // indirect\n\tgithub.com/google/gofuzz v1.2.0 // indirect\n\tgithub.com/google/uuid v1.3.0 // indirect\n\tgithub.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect\n\tgithub.com/googleapis/gax-go/v2 v2.7.1 // indirect\n\tgithub.com/gruntwork-io/go-commons v0.8.0 // indirect\n\tgithub.com/hashicorp/errwrap v1.0.0 // indirect\n\tgithub.com/hashicorp/go-cleanhttp v0.5.2 // indirect\n\tgithub.com/hashicorp/go-getter v1.7.4 // indirect\n\tgithub.com/hashicorp/go-multierror v1.1.0 // indirect\n\tgithub.com/hashicorp/go-safetemp v1.0.0 // indirect\n\tgithub.com/hashicorp/go-version v1.6.0 // indirect\n\tgithub.com/hashicorp/hcl/v2 v2.9.1 // indirect\n\tgithub.com/hashicorp/terraform-json v0.13.0 // indirect\n\tgithub.com/imdario/mergo v0.3.11 // indirect\n\tgithub.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a // indirect\n\tgithub.com/jmespath/go-jmespath v0.4.0 // indirect\n\tgithub.com/josharian/intern v1.0.0 // indirect\n\tgithub.com/json-iterator/go v1.1.12 // indirect\n\tgithub.com/klauspost/compress v1.15.11 // indirect\n\tgithub.com/mailru/easyjson v0.7.7 // indirect\n\tgithub.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 // indirect\n\tgithub.com/mitchellh/go-homedir v1.1.0 // indirect\n\tgithub.com/mitchellh/go-testing-interface v1.14.1 // indirect\n\tgithub.com/mitchellh/go-wordwrap v1.0.1 // indirect\n\tgithub.com/moby/spdystream v0.2.0 // indirect\n\tgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect\n\tgithub.com/modern-go/reflect2 v1.0.2 // indirect\n\tgithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/pquerna/otp v1.2.0 // indirect\n\tgithub.com/russross/blackfriday/v2 v2.1.0 // indirect\n\tgithub.com/spf13/pflag v1.0.5 // indirect\n\tgithub.com/tmccombs/hcl2json v0.3.3 // indirect\n\tgithub.com/ulikunitz/xz v0.5.10 // indirect\n\tgithub.com/urfave/cli v1.22.2 // indirect\n\tgithub.com/zclconf/go-cty v1.9.1 // indirect\n\tgo.opencensus.io v0.24.0 // indirect\n\tgolang.org/x/crypto v0.21.0 // indirect\n\tgolang.org/x/net v0.23.0 // indirect\n\tgolang.org/x/oauth2 v0.8.0 // indirect\n\tgolang.org/x/sys v0.18.0 // indirect\n\tgolang.org/x/term v0.18.0 // indirect\n\tgolang.org/x/text v0.14.0 // indirect\n\tgolang.org/x/time v0.3.0 // indirect\n\tgolang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect\n\tgoogle.golang.org/api v0.114.0 // indirect\n\tgoogle.golang.org/appengine v1.6.7 // indirect\n\tgoogle.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect\n\tgoogle.golang.org/grpc v1.56.3 // indirect\n\tgoogle.golang.org/protobuf v1.33.0 // indirect\n\tgopkg.in/inf.v0 v0.9.1 // indirect\n\tgopkg.in/yaml.v2 v2.4.0 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n\tk8s.io/api v0.28.4 // indirect\n\tk8s.io/apimachinery v0.28.4 // indirect\n\tk8s.io/client-go v0.28.4 // indirect\n\tk8s.io/klog/v2 v2.100.1 // indirect\n\tk8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect\n\tk8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect\n\tsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect\n\tsigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect\n\tsigs.k8s.io/yaml v1.3.0 // indirect\n)\n"
  },
  {
    "path": "test/src/go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=\ncloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=\ncloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=\ncloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=\ncloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=\ncloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=\ncloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=\ncloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=\ncloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=\ncloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=\ncloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=\ncloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=\ncloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=\ncloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=\ncloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=\ncloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=\ncloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=\ncloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=\ncloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=\ncloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=\ncloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=\ncloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=\ncloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=\ncloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=\ncloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=\ncloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=\ncloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=\ncloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=\ncloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=\ncloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=\ncloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys=\ncloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=\ncloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=\ncloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=\ncloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=\ncloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=\ncloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4=\ncloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0=\ncloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ=\ncloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk=\ncloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o=\ncloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s=\ncloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0=\ncloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=\ncloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=\ncloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=\ncloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=\ncloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=\ncloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=\ncloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=\ncloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=\ncloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=\ncloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=\ncloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=\ncloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA=\ncloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY=\ncloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=\ncloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM=\ncloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI=\ncloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY=\ncloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI=\ncloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=\ncloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=\ncloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=\ncloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=\ncloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=\ncloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=\ncloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=\ncloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY=\ncloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=\ncloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=\ncloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=\ncloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=\ncloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=\ncloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=\ncloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs=\ncloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc=\ncloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM=\ncloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ=\ncloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo=\ncloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE=\ncloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I=\ncloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ=\ncloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo=\ncloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA=\ncloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=\ncloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=\ncloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo=\ncloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=\ncloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4=\ncloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0=\ncloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8=\ncloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU=\ncloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU=\ncloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y=\ncloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg=\ncloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=\ncloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=\ncloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk=\ncloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg=\ncloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM=\ncloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA=\ncloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o=\ncloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A=\ncloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0=\ncloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0=\ncloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=\ncloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=\ncloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=\ncloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k=\ncloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0=\ncloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=\ncloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=\ncloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=\ncloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=\ncloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=\ncloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=\ncloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=\ncloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=\ncloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=\ncloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM=\ncloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY=\ncloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s=\ncloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=\ncloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=\ncloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ=\ncloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU=\ncloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY=\ncloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34=\ncloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs=\ncloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg=\ncloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E=\ncloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU=\ncloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0=\ncloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA=\ncloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0=\ncloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI=\ncloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=\ncloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=\ncloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=\ncloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=\ncloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4=\ncloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=\ncloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=\ncloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo=\ncloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg=\ncloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4=\ncloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg=\ncloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c=\ncloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y=\ncloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A=\ncloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4=\ncloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY=\ncloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s=\ncloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI=\ncloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA=\ncloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4=\ncloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0=\ncloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU=\ncloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU=\ncloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc=\ncloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs=\ncloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg=\ncloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM=\ncloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=\ncloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=\ncloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=\ncloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=\ncloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=\ncloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=\ncloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=\ncloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=\ncloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=\ncloud.google.com/go/storage v1.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI=\ncloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y=\ncloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=\ncloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=\ncloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=\ncloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4=\ncloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0=\ncloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo=\ncloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo=\ncloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=\ncloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=\ncloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=\ncloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=\ndmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=\ngithub.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=\ngithub.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=\ngithub.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=\ngithub.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=\ngithub.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=\ngithub.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=\ngithub.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk=\ngithub.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=\ngithub.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=\ngithub.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=\ngithub.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=\ngithub.com/aws/aws-sdk-go v1.44.122 h1:p6mw01WBaNpbdP2xrisz5tIkcNwzj/HysobNoaAHjgo=\ngithub.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=\ngithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=\ngithub.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=\ngithub.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=\ngithub.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=\ngithub.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=\ngithub.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\ngithub.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=\ngithub.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=\ngithub.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=\ngithub.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=\ngithub.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=\ngithub.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\ngithub.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=\ngithub.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=\ngithub.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=\ngithub.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=\ngithub.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=\ngithub.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\ngithub.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\ngithub.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=\ngithub.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=\ngithub.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=\ngithub.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=\ngithub.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\ngithub.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=\ngithub.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=\ngithub.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=\ngithub.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=\ngithub.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0 h1:skJKxRtNmevLqnayafdLe2AsenqRupVmzZSqrvb5caU=\ngithub.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=\ngithub.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=\ngithub.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\ngithub.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\ngithub.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=\ngithub.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=\ngithub.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=\ngithub.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=\ngithub.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=\ngithub.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g=\ngithub.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=\ngithub.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=\ngithub.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=\ngithub.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=\ngithub.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=\ngithub.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=\ngithub.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=\ngithub.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=\ngithub.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=\ngithub.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=\ngithub.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\ngithub.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=\ngithub.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=\ngithub.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=\ngithub.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\ngithub.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=\ngithub.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=\ngithub.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=\ngithub.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=\ngithub.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=\ngithub.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=\ngithub.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=\ngithub.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=\ngithub.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=\ngithub.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=\ngithub.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=\ngithub.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=\ngithub.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\ngithub.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\ngithub.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=\ngithub.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=\ngithub.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=\ngithub.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\ngithub.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=\ngithub.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=\ngithub.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=\ngithub.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=\ngithub.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=\ngithub.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=\ngithub.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=\ngithub.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=\ngithub.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=\ngithub.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=\ngithub.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=\ngithub.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=\ngithub.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=\ngithub.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=\ngithub.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=\ngithub.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=\ngithub.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=\ngithub.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=\ngithub.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A=\ngithub.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=\ngithub.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=\ngithub.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=\ngithub.com/gruntwork-io/go-commons v0.8.0 h1:k/yypwrPqSeYHevLlEDmvmgQzcyTwrlZGRaxEM6G0ro=\ngithub.com/gruntwork-io/go-commons v0.8.0/go.mod h1:gtp0yTtIBExIZp7vyIV9I0XQkVwiQZze678hvDXof78=\ngithub.com/gruntwork-io/terratest v0.46.15 h1:qfqjTFveymaqe7aAWn3LjlK0SwVGpRfoOut5ggNyfQ8=\ngithub.com/gruntwork-io/terratest v0.46.15/go.mod h1:9bd22zAojjBBiYdsp+AR1iyl2iB6bRUVm2Yf1AFhfrA=\ngithub.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=\ngithub.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=\ngithub.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=\ngithub.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=\ngithub.com/hashicorp/go-getter v1.7.4 h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0=\ngithub.com/hashicorp/go-getter v1.7.4/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=\ngithub.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=\ngithub.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=\ngithub.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=\ngithub.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I=\ngithub.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=\ngithub.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/hcl/v2 v2.9.1 h1:eOy4gREY0/ZQHNItlfuEZqtcQbXIxzojlP301hDpnac=\ngithub.com/hashicorp/hcl/v2 v2.9.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg=\ngithub.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY=\ngithub.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk=\ngithub.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\ngithub.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\ngithub.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=\ngithub.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=\ngithub.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o=\ngithub.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=\ngithub.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\ngithub.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=\ngithub.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=\ngithub.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=\ngithub.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=\ngithub.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=\ngithub.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\ngithub.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c=\ngithub.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=\ngithub.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=\ngithub.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=\ngithub.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=\ngithub.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=\ngithub.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=\ngithub.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=\ngithub.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=\ngithub.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=\ngithub.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=\ngithub.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=\ngithub.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=\ngithub.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=\ngithub.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 h1:ofNAzWCcyTALn2Zv40+8XitdzCgXY6e9qvXwN9W0YXg=\ngithub.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=\ngithub.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=\ngithub.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=\ngithub.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=\ngithub.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=\ngithub.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=\ngithub.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=\ngithub.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=\ngithub.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=\ngithub.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=\ngithub.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=\ngithub.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=\ngithub.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=\ngithub.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=\ngithub.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM=\ngithub.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=\ngithub.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=\ngithub.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=\ngithub.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\ngithub.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=\ngithub.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=\ngithub.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=\ngithub.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=\ngithub.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=\ngithub.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=\ngithub.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=\ngithub.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=\ngithub.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=\ngithub.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=\ngithub.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=\ngithub.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/tmccombs/hcl2json v0.3.3 h1:+DLNYqpWE0CsOQiEZu+OZm5ZBImake3wtITYxQ8uLFQ=\ngithub.com/tmccombs/hcl2json v0.3.3/go.mod h1:Y2chtz2x9bAeRTvSibVRVgbLJhLJXKlUeIvjeVdnm4w=\ngithub.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=\ngithub.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=\ngithub.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=\ngithub.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=\ngithub.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=\ngithub.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=\ngithub.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=\ngithub.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngithub.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=\ngithub.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=\ngithub.com/zclconf/go-cty v1.8.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=\ngithub.com/zclconf/go-cty v1.9.1 h1:viqrgQwFl5UpSxc046qblj78wZXVDFnSOufaOTER+cc=\ngithub.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=\ngithub.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8=\ngo.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=\ngo.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=\ngo.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\ngo.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=\ngo.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=\ngo.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=\ngo.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=\ngo.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=\ngolang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=\ngolang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=\ngolang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=\ngolang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\ngolang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\ngolang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\ngolang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=\ngolang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=\ngolang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=\ngolang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=\ngolang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\ngolang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=\ngolang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=\ngolang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=\ngolang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=\ngolang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\ngolang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\ngolang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=\ngolang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=\ngolang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=\ngolang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=\ngolang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=\ngolang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=\ngolang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=\ngolang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\ngolang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=\ngolang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=\ngolang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=\ngolang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=\ngolang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=\ngolang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8=\ngolang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=\ngolang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=\ngolang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=\ngolang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=\ngolang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=\ngolang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=\ngolang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\ngolang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\ngolang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\ngolang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=\ngolang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\ngolang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=\ngolang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=\ngolang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=\ngolang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngolang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngolang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=\ngolang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=\ngoogle.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=\ngoogle.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=\ngoogle.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\ngoogle.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\ngoogle.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\ngoogle.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\ngoogle.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=\ngoogle.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=\ngoogle.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=\ngoogle.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=\ngoogle.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=\ngoogle.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=\ngoogle.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=\ngoogle.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=\ngoogle.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=\ngoogle.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=\ngoogle.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU=\ngoogle.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k=\ngoogle.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=\ngoogle.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=\ngoogle.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=\ngoogle.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=\ngoogle.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=\ngoogle.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=\ngoogle.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=\ngoogle.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=\ngoogle.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=\ngoogle.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=\ngoogle.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=\ngoogle.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=\ngoogle.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=\ngoogle.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o=\ngoogle.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g=\ngoogle.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=\ngoogle.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=\ngoogle.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI=\ngoogle.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=\ngoogle.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=\ngoogle.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE=\ngoogle.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=\ngoogle.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=\ngoogle.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=\ngoogle.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\ngoogle.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=\ngoogle.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\ngoogle.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=\ngoogle.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\ngoogle.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=\ngoogle.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\ngoogle.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=\ngoogle.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=\ngoogle.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=\ngoogle.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=\ngoogle.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=\ngoogle.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=\ngoogle.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=\ngoogle.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=\ngoogle.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=\ngoogle.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=\ngoogle.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=\ngoogle.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=\ngoogle.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=\ngoogle.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=\ngoogle.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=\ngoogle.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=\ngoogle.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=\ngoogle.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=\ngoogle.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc=\ngoogle.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=\ngoogle.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=\ngoogle.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw=\ngoogle.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=\ngoogle.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=\ngoogle.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U=\ngoogle.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=\ngoogle.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=\ngoogle.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=\ngoogle.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=\ngoogle.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=\ngoogle.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\ngoogle.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\ngoogle.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\ngoogle.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\ngoogle.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=\ngoogle.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=\ngoogle.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\ngoogle.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=\ngoogle.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=\ngoogle.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=\ngoogle.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=\ngoogle.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=\ngoogle.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=\ngoogle.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=\ngoogle.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=\ngoogle.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=\ngoogle.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=\ngoogle.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=\ngoogle.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=\ngoogle.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=\ngoogle.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc=\ngoogle.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=\ngoogle.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngoogle.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=\ngoogle.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\ngoogle.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=\ngoogle.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=\ngoogle.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=\ngoogle.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=\ngoogle.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=\ngoogle.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=\ngoogle.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=\ngopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\ngopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=\ngopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=\nhonnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\nhonnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\nk8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=\nk8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=\nk8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=\nk8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=\nk8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=\nk8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=\nk8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=\nk8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=\nk8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=\nk8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=\nk8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=\nk8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=\nrsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=\nrsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=\nrsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=\nsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=\nsigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=\nsigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=\nsigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=\nsigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=\nsigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=\n"
  },
  {
    "path": "test/src/utils.go",
    "content": "package test\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/gruntwork-io/terratest/modules/terraform\"\n)\n\nfunc cleanup(t *testing.T, terraformOptions *terraform.Options, tempTestFolder string) {\n\tterraform.Destroy(t, terraformOptions)\n\t_ = os.RemoveAll(tempTestFolder)\n}\n"
  },
  {
    "path": "variables.tf",
    "content": "variable \"zone_id\" {\n  type        = any\n  default     = []\n  description = <<-EOT\n    Route53 DNS Zone ID as list of string (0 or 1 items). If empty, no custom DNS name will be published.\n    If the list contains a single Zone ID, a custom DNS name will be pulished in that zone.\n    Can also be a plain string, but that use is DEPRECATED because of Terraform issues.\n    EOT\n}\n\nvariable \"security_groups\" {\n  type        = list(string)\n  default     = []\n  description = \"List of security groups to be allowed to connect to the DB instance\"\n}\n\nvariable \"vpc_id\" {\n  type        = string\n  description = \"VPC ID to create the cluster in (e.g. `vpc-a22222ee`)\"\n}\n\nvariable \"subnets\" {\n  type        = list(string)\n  description = \"List of VPC subnet IDs\"\n}\n\nvariable \"instance_type\" {\n  type        = string\n  default     = \"db.t2.small\"\n  description = \"Instance type to use\"\n}\n\nvariable \"cluster_identifier\" {\n  type        = string\n  default     = \"\"\n  description = \"The RDS Cluster Identifier. Will use generated label ID if not supplied\"\n}\n\nvariable \"instance_identifier_suffix\" {\n  type        = string\n  default     = null\n  nullable    = true\n  description = <<-EOT\n    The suffix to append to DB instance identifiers.\n    If `null`, the module will generate a random suffix. If empty, no suffix will be appended.\n    EOT\n}\n\nvariable \"cluster_size\" {\n  type        = number\n  default     = 2\n  description = \"Number of DB instances to create in the cluster\"\n}\n\nvariable \"snapshot_identifier\" {\n  type        = string\n  default     = null\n  description = \"Specifies whether or not to create this cluster from a snapshot\"\n}\n\nvariable \"db_name\" {\n  type        = string\n  default     = \"\"\n  description = \"Database name (default is not to create a database)\"\n}\n\nvariable \"db_port\" {\n  type        = number\n  default     = 3306\n  description = \"Database port\"\n}\n\nvariable \"manage_admin_user_password\" {\n  type        = bool\n  default     = false\n  nullable    = false\n  description = \"Set to true to allow RDS to manage the master user password in Secrets Manager. Cannot be set if master_password is provided\"\n}\n\nvariable \"admin_user_secret_kms_key_id\" {\n  type        = string\n  default     = null\n  description = <<-EOT\n    Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key.\n    To use a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN.\n    If not specified, the default KMS key for your Amazon Web Services account is used.\n    EOT\n}\n\nvariable \"admin_user\" {\n  type        = string\n  default     = \"admin\"\n  description = \"Username for the master DB user. Ignored if snapshot_identifier or replication_source_identifier is provided\"\n}\n\nvariable \"admin_password\" {\n  type        = string\n  default     = \"\"\n  description = \"Password for the master DB user. Ignored if snapshot_identifier or replication_source_identifier is provided\"\n}\n\nvariable \"retention_period\" {\n  type        = number\n  default     = 5\n  description = \"Number of days to retain backups for\"\n}\n\nvariable \"backup_window\" {\n  type        = string\n  default     = \"07:00-09:00\"\n  description = \"Daily time range during which the backups happen\"\n}\n\nvariable \"maintenance_window\" {\n  type        = string\n  default     = \"wed:03:00-wed:04:00\"\n  description = \"Weekly time range during which system maintenance can occur, in UTC\"\n}\n\nvariable \"cluster_parameters\" {\n  type = list(object({\n    apply_method = string\n    name         = string\n    value        = string\n  }))\n  default     = []\n  description = \"List of DB cluster parameters to apply\"\n}\n\nvariable \"rds_cluster_parameter_group_name\" {\n  type        = string\n  default     = \"\"\n  description = <<-EOT\n    The name to give to the created `aws_rds_cluster_parameter_group` resource.\n    If omitted, the module will generate a name.\n    EOT\n}\n\nvariable \"instance_parameters\" {\n  type = list(object({\n    apply_method = string\n    name         = string\n    value        = string\n  }))\n  default     = []\n  description = \"List of DB instance parameters to apply\"\n}\n\nvariable \"db_parameter_group_name\" {\n  type        = string\n  default     = \"\"\n  description = <<-EOT\n    The name to give to the created `aws_db_parameter_group` resource.\n    If omitted, the module will generate a name.\n    EOT\n}\n\nvariable \"db_cluster_instance_class\" {\n  type        = string\n  default     = null\n  description = \"This setting is required to create a provisioned Multi-AZ DB cluster\"\n}\n\nvariable \"cluster_family\" {\n  type        = string\n  default     = \"aurora5.6\"\n  description = \"The family of the DB cluster parameter group\"\n}\n\nvariable \"engine\" {\n  type        = string\n  default     = \"aurora\"\n  description = \"The name of the database engine to be used for this DB cluster. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql`\"\n}\n\nvariable \"engine_mode\" {\n  type        = string\n  default     = \"provisioned\"\n  description = \"The database engine mode. Valid values: `parallelquery`, `provisioned`, `serverless`\"\n}\n\nvariable \"engine_version\" {\n  type        = string\n  default     = \"\"\n  description = \"The version of the database engine to use. See `aws rds describe-db-engine-versions` \"\n}\n\nvariable \"allow_major_version_upgrade\" {\n  type        = bool\n  default     = false\n  description = \"Enable to allow major engine version upgrades when changing engine versions. Defaults to false.\"\n}\n\nvariable \"auto_minor_version_upgrade\" {\n  type        = bool\n  default     = true\n  description = \"Indicates that minor engine upgrades will be applied automatically to the DB instance during the maintenance window\"\n}\n\nvariable \"s3_import\" {\n  type = object({\n    bucket_name           = string\n    bucket_prefix         = string\n    ingestion_role        = string\n    source_engine         = string\n    source_engine_version = string\n  })\n  default     = null\n  description = \"Restore from a Percona Xtrabackup in S3. The `bucket_name` is required to be in the same region as the resource.\"\n}\n\nvariable \"scaling_configuration\" {\n  type = list(object({\n    auto_pause               = bool\n    max_capacity             = number\n    min_capacity             = number\n    seconds_until_auto_pause = number\n    timeout_action           = string\n  }))\n  default     = []\n  description = \"List of nested attributes with scaling properties. Only valid when `engine_mode` is set to `serverless`\"\n}\n\nvariable \"serverlessv2_scaling_configuration\" {\n  type = object({\n    min_capacity             = number\n    max_capacity             = number\n    seconds_until_auto_pause = optional(number, null)\n  })\n  default     = null\n  description = \"serverlessv2 scaling properties\"\n}\n\nvariable \"timeouts_configuration\" {\n  type = list(object({\n    create = string\n    update = string\n    delete = string\n  }))\n  default     = []\n  description = \"List of timeout values per action. Only valid actions are `create`, `update` and `delete`\"\n}\n\nvariable \"restore_to_point_in_time\" {\n  type = list(object({\n    source_cluster_identifier  = string\n    restore_type               = optional(string, \"copy-on-write\")\n    use_latest_restorable_time = optional(bool, true)\n    restore_to_time            = optional(string, null)\n  }))\n  default     = []\n  description = <<-EOT\n    List of point-in-time recovery options. Valid parameters are:\n\n    `source_cluster_identifier`\n      Identifier of the source database cluster from which to restore.\n    `restore_type`:\n      Type of restore to be performed. Valid options are \"full-copy\" and \"copy-on-write\".\n    `use_latest_restorable_time`:\n      Set to true to restore the database cluster to the latest restorable backup time. Conflicts with `restore_to_time`.\n    `restore_to_time`:\n      Date and time in UTC format to restore the database cluster to. Conflicts with `use_latest_restorable_time`.\nEOT\n}\n\nvariable \"allowed_cidr_blocks\" {\n  type        = list(string)\n  default     = []\n  description = \"List of CIDR blocks allowed to access the cluster\"\n}\n\nvariable \"allowed_ipv6_cidr_blocks\" {\n  type        = list(string)\n  default     = []\n  description = \"List of IPv6 CIDR blocks allowed to access the cluster\"\n}\n\nvariable \"publicly_accessible\" {\n  type        = bool\n  description = \"Set to true if you want your cluster to be publicly accessible (such as via QuickSight)\"\n  default     = false\n}\n\nvariable \"storage_encrypted\" {\n  type        = bool\n  description = \"Specifies whether the DB cluster is encrypted. The default is `false` for `provisioned` `engine_mode` and `true` for `serverless` `engine_mode`\"\n  default     = false\n}\n\nvariable \"storage_type\" {\n  type        = string\n  description = \"One of 'standard' (magnetic), 'gp2' (general purpose SSD), 'io1' (provisioned IOPS SSD), 'aurora', or 'aurora-iopt1'\"\n  default     = null\n}\n\nvariable \"iops\" {\n  type        = number\n  description = \"The amount of provisioned IOPS. Setting this implies a storage_type of 'io1'. This setting is required to create a Multi-AZ DB cluster. Check TF docs for values based on db engine\"\n  default     = null\n}\n\nvariable \"allocated_storage\" {\n  type        = number\n  description = \"The allocated storage in GBs\"\n  default     = null\n}\n\nvariable \"kms_key_arn\" {\n  type        = string\n  description = \"The ARN for the KMS encryption key. When specifying `kms_key_arn`, `storage_encrypted` needs to be set to `true`\"\n  default     = \"\"\n}\n\nvariable \"skip_final_snapshot\" {\n  type        = bool\n  description = \"Determines whether a final DB snapshot is created before the DB cluster is deleted\"\n  default     = true\n}\n\nvariable \"copy_tags_to_snapshot\" {\n  type        = bool\n  description = \"Copy tags to backup snapshots\"\n  default     = false\n}\n\nvariable \"deletion_protection\" {\n  type        = bool\n  description = \"If the DB instance should have deletion protection enabled\"\n  default     = false\n}\n\nvariable \"apply_immediately\" {\n  type        = bool\n  description = \"Specifies whether any cluster modifications are applied immediately, or during the next maintenance window\"\n  default     = true\n}\n\nvariable \"iam_database_authentication_enabled\" {\n  type        = bool\n  description = \"Specifies whether or mappings of AWS Identity and Access Management (IAM) accounts to database accounts is enabled\"\n  default     = false\n}\n\nvariable \"rds_monitoring_interval\" {\n  type        = number\n  description = \"The interval, in seconds, between points when enhanced monitoring metrics are collected for the DB instance. To disable collecting Enhanced Monitoring metrics, specify 0. The default is 0. Valid Values: 0, 1, 5, 10, 15, 30, 60\"\n  default     = 0\n}\n\nvariable \"rds_monitoring_role_arn\" {\n  type        = string\n  description = \"The ARN for the IAM role that permits RDS to send enhanced monitoring metrics to CloudWatch Logs\"\n  default     = null\n}\n\nvariable \"enhanced_monitoring_role_enabled\" {\n  type        = bool\n  description = \"A boolean flag to enable/disable the creation of the enhanced monitoring IAM role. If set to `false`, the module will not create a new role and will use `rds_monitoring_role_arn` for enhanced monitoring\"\n  default     = false\n}\n\nvariable \"replication_source_identifier\" {\n  type        = string\n  description = \"ARN of a source DB cluster or DB instance if this DB cluster is to be created as a Read Replica\"\n  default     = \"\"\n}\n\nvariable \"enabled_cloudwatch_logs_exports\" {\n  type        = list(string)\n  description = \"List of log types to export to cloudwatch. The following log types are supported: audit, error, general, slowquery\"\n  default     = []\n}\n\nvariable \"performance_insights_enabled\" {\n  type        = bool\n  default     = false\n  description = \"Whether to enable Performance Insights\"\n}\n\nvariable \"performance_insights_kms_key_id\" {\n  type        = string\n  default     = \"\"\n  description = \"The ARN for the KMS key to encrypt Performance Insights data. When specifying `performance_insights_kms_key_id`, `performance_insights_enabled` needs to be set to true\"\n}\n\nvariable \"performance_insights_retention_period\" {\n  description = \"Amount of time in days to retain Performance Insights data. Either 7 (7 days) or 731 (2 years)\"\n  type        = number\n  default     = null\n}\n\nvariable \"database_insights_mode\" {\n  description = \"The database insights mode for the RDS cluster. Valid values are `standard`, `advanced`. See https://registry.terraform.io/providers/hashicorp/aws/6.16.0/docs/resources/rds_cluster#database_insights_mode-1\"\n  type        = string\n  default     = null\n}\n\nvariable \"promotion_tier\" {\n  type        = number\n  default     = 0\n  description = <<-EOT\nFailover Priority setting on instance level. The reader who has lower tier has higher priority to get promoted to writer.\n\nReaders in promotion tiers 0 and 1 scale at the same time as the writer. Readers in promotion tiers 2–15 scale independently from the writer. For more information, see: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.how-it-works.html#aurora-serverless-v2.how-it-works.scaling\nEOT\n}\nvariable \"autoscaling_enabled\" {\n  type        = bool\n  default     = false\n  description = \"Whether to enable cluster autoscaling\"\n}\n\nvariable \"autoscaling_policy_type\" {\n  type        = string\n  default     = \"TargetTrackingScaling\"\n  description = \"Autoscaling policy type. `TargetTrackingScaling` and `StepScaling` are supported\"\n}\n\nvariable \"autoscaling_target_metrics\" {\n  type        = string\n  default     = \"RDSReaderAverageCPUUtilization\"\n  description = \"The metrics type to use. If this value isn't provided the default is CPU utilization\"\n}\n\nvariable \"autoscaling_target_value\" {\n  type        = number\n  default     = 75\n  description = \"The target value to scale with respect to target metrics\"\n}\n\nvariable \"autoscaling_scale_in_cooldown\" {\n  type        = number\n  default     = 300\n  description = \"The amount of time, in seconds, after a scaling activity completes and before the next scaling down activity can start. Default is 300s\"\n}\n\nvariable \"autoscaling_scale_out_cooldown\" {\n  type        = number\n  default     = 300\n  description = \"The amount of time, in seconds, after a scaling activity completes and before the next scaling up activity can start. Default is 300s\"\n}\n\nvariable \"autoscaling_min_capacity\" {\n  type        = number\n  default     = 1\n  description = \"Minimum number of instances to be maintained by the autoscaler\"\n}\n\nvariable \"autoscaling_max_capacity\" {\n  type        = number\n  default     = 5\n  description = \"Maximum number of instances to be maintained by the autoscaler\"\n}\n\nvariable \"instance_availability_zone\" {\n  type        = string\n  default     = \"\"\n  description = \"Optional parameter to place cluster instances in a specific availability zone. If left empty, will place randomly\"\n}\n\nvariable \"cluster_dns_name\" {\n  type        = string\n  description = \"Name of the cluster CNAME record to create in the parent DNS zone specified by `zone_id`. If left empty, the name will be auto-asigned using the format `master.var.name`\"\n  default     = \"\"\n}\n\nvariable \"reader_dns_name\" {\n  type        = string\n  description = \"Name of the reader endpoint CNAME record to create in the parent DNS zone specified by `zone_id`. If left empty, the name will be auto-asigned using the format `replicas.var.name`\"\n  default     = \"\"\n}\n\nvariable \"cluster_type\" {\n  type        = string\n  description = <<-EOT\n    Either `regional` or `global`.\n    If `regional` will be created as a normal, standalone DB.\n    If `global`, will be made part of a Global cluster (requires `global_cluster_identifier`).\n    EOT\n  default     = \"regional\"\n\n  validation {\n    condition     = contains([\"regional\", \"global\"], var.cluster_type)\n    error_message = \"Allowed values: `regional` (standalone), `global` (part of global cluster).\"\n  }\n}\n\nvariable \"global_cluster_identifier\" {\n  type        = string\n  description = \"ID of the Aurora global cluster\"\n  default     = \"\"\n}\n\nvariable \"source_region\" {\n  type        = string\n  description = \"Source Region of primary cluster, needed when using encrypted storage and region replicas\"\n  default     = \"\"\n}\n\nvariable \"iam_roles\" {\n  type        = list(string)\n  description = \"Iam roles for the Aurora cluster\"\n  default     = []\n}\n\nvariable \"backtrack_window\" {\n  type        = number\n  description = \"The target backtrack window, in seconds. Only available for aurora engine currently. Must be between 0 and 259200 (72 hours)\"\n  default     = 0\n}\n\nvariable \"enable_http_endpoint\" {\n  type        = bool\n  description = \"Enable HTTP endpoint (data API).\"\n  default     = false\n}\n\nvariable \"vpc_security_group_ids\" {\n  type        = list(string)\n  description = \"Additional security group IDs to apply to the cluster, in addition to the provisioned default security group with ingress traffic from existing CIDR blocks and existing security groups\"\n\n  default = []\n}\n\nvariable \"ca_cert_identifier\" {\n  description = \"The identifier of the CA certificate for the DB instance\"\n  type        = string\n  default     = null\n}\n\nvariable \"egress_enabled\" {\n  description = \"Whether or not to apply the egress security group rule to default security group, defaults to `true`\"\n  type        = bool\n  default     = true\n}\n\nvariable \"enhanced_monitoring_attributes\" {\n  description = \"The attributes for the enhanced monitoring IAM role\"\n  type        = list(string)\n  default     = [\"enhanced-monitoring\"]\n}\n\nvariable \"subnet_group_name\" {\n  description = \"Database subnet group name. Will use generated label ID if not supplied.\"\n  type        = string\n  default     = \"\"\n}\n\nvariable \"intra_security_group_traffic_enabled\" {\n  type        = bool\n  default     = false\n  description = \"Whether to allow traffic between resources inside the database's security group.\"\n}\n\nvariable \"activity_stream_enabled\" {\n  type        = bool\n  default     = false\n  description = \"Whether to enable Activity Streams\"\n}\n\nvariable \"activity_stream_mode\" {\n  type        = string\n  default     = \"async\"\n  description = \"The mode for the Activity Streams. `async` and `sync` are supported. Defaults to `async`\"\n}\n\nvariable \"activity_stream_kms_key_id\" {\n  type        = string\n  default     = \"\"\n  description = \"The ARN for the KMS key to encrypt Activity Stream Data data. When specifying `activity_stream_kms_key_id`, `activity_stream_enabled` needs to be set to true\"\n}\n\nvariable \"parameter_group_name_prefix_enabled\" {\n  type        = bool\n  default     = true\n  description = \"Set to `true` to use `name_prefix` to name the cluster and database parameter groups. Set to `false` to use `name` instead\"\n}\n\nvariable \"enable_global_write_forwarding\" {\n  type        = bool\n  default     = null\n  description = \"Set to `true`, to forward writes to an associated global cluster.\"\n}\n\nvariable \"enable_local_write_forwarding\" {\n  type        = bool\n  default     = null\n  description = \"Set to `true`, to forward writes sent to a reader to the writer instance.\"\n}\n\nvariable \"network_type\" {\n  type        = string\n  default     = \"IPV4\"\n  description = \"The network type of the cluster. Valid values: IPV4, DUAL.\"\n}\n\nvariable \"use_reserved_instances\" {\n  type        = bool\n  default     = false\n  description = <<-EOT\n    WARNING: Observe your plans and applies carefully when using this feature.\n    It has potential to be very expensive if not used correctly.\n    Also, it is not clear what happens when the reservation expires.\n\n    Whether to use reserved instances.\n  EOT\n}\n\nvariable \"rds_ri_offering_type\" {\n  type        = string\n  default     = \"\"\n  description = \"Offering type of reserved DB instances. Valid values are 'No Upfront', 'Partial Upfront', 'All Upfront'.\"\n}\n\nvariable \"rds_ri_duration\" {\n  type        = number\n  default     = 1\n  description = \"The number of years to reserve the instance. Values can be 1 or 3 (or in seconds, 31536000 or 94608000)\"\n}\n\nvariable \"rds_ri_reservation_id\" {\n  type        = string\n  default     = null\n  description = \"Customer-specified identifier to track the reservation of the reserved DB instance.\"\n}\n"
  },
  {
    "path": "versions.tf",
    "content": "terraform {\n  required_version = \">= 1.0.0\"\n\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \">= 5.81.0\"\n    }\n    null = {\n      source  = \"hashicorp/null\"\n      version = \">= 2.0\"\n    }\n    random = {\n      source  = \"hashicorp/random\"\n      version = \">= 2.0\"\n    }\n  }\n}\n"
  }
]